回答:
通常/var/run/
、Redhat / CentOSスタイルのシステムでは、デーモン化されたプロセスのPIDファイルが見つかります。
それ以外では、常にプロセスの初期化スクリプトを見ることができます。たとえば、SSHデーモンはのスクリプトで起動され/etc/init.d/sshd
ます。時々、PIDがそこで定義されます(pid、PID、PIDFILE、PID_FILEなどを検索します)。
ただし、RHELスタイルのシステム上の他のほとんどのデーモンは/etc/init.d/functions
、いくつかの一般的な機能のスクリプトを提供しています。
# Set $pid to pids from /var/run* for {program}. $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
local base=${1##*/}
local pid_file=${2:-/var/run/$base.pid}
ソース/etc/init.d/functions
が何であれ、PIDは住んでい/var/run/*.pid
ます。
カスタムアプリケーションの場合、PIDはラッパースクリプトで定義されます(できれば)。ただし、私が知っているほとんどの開発者は、上記のデーモンと同じ規則に従います。
あなたがいる場合行う PIDファイルを使用せずに遭遇何かを、ことを覚えてMONITが同様のプロセス列摂餌に監視することができます。
monit procmatch anything
私が取得コマンドラインで monit: invalid argument -- procmatch
。何か案は?
monit -V
)どのOS /ディストリビューション?
私が取った別のアプローチ:
埋め込みモードで実行されているデータベースサーバーがあり、データは含まれているアプリケーションのディレクトリ内にあります。
データベースには.pidファイルのようなものがありますが、ロックファイルと呼ばれます。このロックファイルを見つけるために、アプリによって開かれているすべてのファイルをリストしました。
$ ls -l /proc/18264/fd | cut -d'>' -f2
それにより、ソケット、パイプ、サーバーファイルなどを含む長いリストが得られました。フィルターはほとんどなく、必要なものに到達しました。
$ ls -l /proc/18264/fd | cut -d'>' -f2 | grep /home/ | cut -b40- | sort | uniq | grep titan
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/00000000.jdb
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0.lck
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.lck
.pid
ファイルがあるわけではありません。アプリケーション(またはその起動スクリプト)は、明示的に作成する必要があります。