Bashスクリプトを実行するときに同じスクリプトがまだ実行されていないことをどのように確認できますか?

Bashスクリプトを実行するときに同じスクリプトがまだ実行されていないことをどのように確認できますか?

スクリプトの他のインスタンスがすでに実行されている場合は、スクリプトを終了する方法についていくつかの提案がありました。私の問題はその逆です。同じスクリプトの他のすべてのインスタンス(存在する場合)をすべて終了し、スクリプトを実行し続ける方法を探したいと思います。これを行う方法はありますか?

ベストアンサー1

PIDS=$(pidof -x nameofyourscript)スクリプトを含むすべてのPID(存在する場合)を取得するには、次の操作を実行できます。それではあなたはできます。kill $PIDS

編集:上記は現在のスクリプトも終了するので、答えを修正して-o次のオプションを追加してください。PIDS=$(pidof -x -o $$ nameofyourscript) これ-o $$により、現在のスクリプトのpidが省略されます。

より良いことは、スクリプト名をハードコードするのではなく、次から独自の名前を取得することです$0

kill $(pidof -x -o $$ $0)

そのため、スクリプトの先頭に配置して2>/dev/null他のインスタンスを見つけることができず、問題が解決した場合に使用できます。

おすすめ記事