macOSでbashスクリプトをどのようにpgrepしますか(またはバックグラウンドで実行されているスクリプトをプログラムで終了しますか?)

macOSでbashスクリプトをどのようにpgrepしますか(またはバックグラウンドで実行されているスクリプトをプログラムで終了しますか?)

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、実際にできることは、pidfind 操作を完了するだけです。pkillこれは次のような多くのパラメータを共有しますpgrep

% pkill -U 502 -f sleepforever.sh
%

関連情報