pgrep(または他のツール)を使用して同じ名前を持つ複数のプロセスの1つを見つけるにはどうすればよいですか? [閉鎖]

pgrep(または他のツール)を使用して同じ名前を持つ複数のプロセスの1つを見つけるにはどうすればよいですか? [閉鎖]

複数のbashスクリプトが実行されています。それらの間の唯一の違いはpidです。こんな台本を書きたいこれ特定のbashプロセスのみを監視し、子プロセスを除外します。私は見たこれ問題がありますが、この場合はプロセス名が異なるため、正確な正規表現を作成するだけです。

現在私がするなら

% pgrep bash 
40583
47095
48133
49244

もし私がするなら

% pgrep -P 47095
47099
50151

次のようなことをしたい

% pgrep bash -P 47095

それから結果を得なさい。

47095 # (i.e. no daughter processes)

47095 が存在しない場合は、NULL 値が返されます。これはどのように達成できますか?答えはpgrepに基づいている必要はありません。重要なことは、プロセスが実行されている場合は1行だけを返し、そのようなプロセスがなければ何も返さないということです。

答え1

私の考えでは、あなたがしたいのはPIDファイルの処理です。pgrep、使用する代わりに-P

-F, --pidfile file
   Read PIDs from file.  This option is more useful for pkill or pidwait than pgrep.

実行中:

% sleep 100 &
[1] 26819
% echo 26819 > pid
% pgrep -F pid sleep
26819
% pgrep -F pid sleep -l
26819 sleep
% pgrep -F pid awake -l
%

関連情報