バックグラウンド プロセス (macOS 上) として実行されている bash スクリプトをプログラムで強制終了しようとしています。私が今決めた方法pgrep
は、スクリプトの名前を指定し、PID 値をkill
関数に渡すことです。
注:これを行う方法についてより良い提案がある場合は、遠慮なく提供してください。
私が直面している問題は、macOS では、プロセスの名前がスクリプトの名前だけでなく、/bin/bash /Users/...../[scriptname]
. さらにpgrep [scriptname]
、PID を取得することはできません。pgrep bash
代わりに取得する必要があり、結果として複数の結果が得られることがよくあります。
i)このスクリプトをpgrep
適切に使用する方法、kill
またはii)これを行うためのより明白でクリーンな方法があるかどうかについて誰かが推奨していますか?
注: Lubuntu で同じスクリプトを実行すると/bin/bash
、名前の一部として完全なディレクトリが含まれず、代わりに[scriptname]
. したがってpgrep [scriptname]
、意図したとおりに動作します。
はい - 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
. 仕事を完了するには、次を使用しますpkill
- 引数の多くを次のものと共有しますpgrep
。
% pkill -U 502 -f sleepforever.sh
%
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加