GNU/Linux >> Linux の 問題 >  >> Linux

特定のプロセスの .pid ファイルを見つける方法

解決策 1:

通常、デーモン化されたプロセスの PID ファイルは /var/run/ にあります。 Redhat/CentOS スタイルのシステムで。

それ以外は、プロセスの init スクリプトをいつでも確認できます。たとえば、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 はプロセス文字列パターンでも監視できることを思い出してください。

解決策 2:

私がとった別のアプローチ:

組み込みモードで実行されているデータベース サーバーがあり、データはそれを含むアプリケーションのディレクトリ内にあります。

データベースには .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

Linux
  1. コンソールで大きなファイルをチェックする方法

  2. 特定のデバイスのカーネルモジュールを見つける方法は?

  3. LinuxでMimeタイプのアプリケーションを見つける方法は?

  1. 最大のファイル記述子を持つプロセスを見つける方法は?

  2. nohupプロセスを強制終了するプロセスIDを取得するには?

  3. Linux で特定のプログラムのプロセス ID を設定する方法

  1. Linuxのディレクトリツリーで最も古いファイルを見つける方法

  2. sshfs の鍵ファイルを指定するにはどうすればよいですか?

  3. デフォルトのファイルマネージャを見つける方法は?