複数の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
%