![pgrep(または他のツール)を使用して同じ名前を持つ複数のプロセスの1つを見つけるにはどうすればよいですか? [閉鎖]](https://linux33.com/image/222746/pgrep%EF%BC%88%E3%81%BE%E3%81%9F%E3%81%AF%E4%BB%96%E3%81%AE%E3%83%84%E3%83%BC%E3%83%AB%EF%BC%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E5%90%8C%E3%81%98%E5%90%8D%E5%89%8D%E3%82%92%E6%8C%81%E3%81%A4%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE1%E3%81%A4%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
複数の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
%