macOSでバックグラウンドプロセスとして実行されているbashスクリプトをプログラムで終了しようとしています。ここで決定したアプローチは、pgrep
スクリプト名を指定してPID値をkill
関数に渡すことです。
注:これを行う方法についてより良い提案がある場合は、いつでもお知らせください。
私が遭遇している問題は、macOSでプロセス名だけでスクリプト名ではありません/bin/bash /Users/...../[scriptname]
。私にはいくつかの結果があります。pgrep [scriptname]
pgrep bash
誰もがi)pgrep
このスクリプトを正しく使用する方法kill
、またはii)これを行うためのより明確でクリーンな方法はありますか?
/bin/bash
注:Lubuntuで同じスクリプトを実行すると、名前の一部として完全なディレクトリはありませんが[scriptname]
。とだけ指定されているので、期待pgrep [scriptname]
どおりに動作します。
答え1
はい - macOSはこの点で非常に混乱しています。しかし、私はpgrep
これがpkill
この問題を解決する良い方法だと思います。
% pgrep -U 502 -f sleepforever.sh
43894
説明が必要な場合があります。
-U 502
私のものになる実際のユーザーIDから得たid
sleepforever.sh
これをテストするために作成したスクリプトは次のとおりです。#!/bin/bash while : do sleep 10 done
ただしpgrep
、実際にできることは、pid
find 操作を完了するだけです。pkill
これは次のような多くのパラメータを共有しますpgrep
。
% pkill -U 502 -f sleepforever.sh
%