フォルダで実行されているすべてのスクリプトのPIDSを知る正しい方法は何ですか

フォルダで実行されているすべてのスクリプトのPIDSを知る正しい方法は何ですか

/home/testing/scriptsLinuxシステムのフォルダには、完全さを実行してテストするための234の異なるスクリプトがあります。

〜のように

/home/testing/scripts/test.network.py
/home/testing/scripts/test.hw.py
/home/testing/scripts/test.load.sh
.
.
.

場合によっては、実行中のすべてのスクリプトを終了したいと思います。

したがって、実行中のスクリプトのpidを見つけるには、次のようにします。

lsof /home/testing/scripts/

そして私たちが使用しているすべてのPIDを終了します。

for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done

スクリプトを実行するとします。/home/testing/scripts/test.network.py

ps -ef |grep "testing/scripts"私たちから入手

root      5793 17546 84 09:20 ?        00:00:00 python3 -u /home/testing/scripts/test.network.py

だからlsof私たちは同じpid番号を取得する必要があります

lsof /home/testing/scripts/

今私の方法が何であるか知りたいです。

for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done

以下で実行されているすべてのスクリプトを終了するのに十分です。/home/testing/scripts/

それとも別の提案がありますか?

ベストアンサー1

コマンドを少し整理できますが、私の考えではすでにかなり正確です。潜在的な不一致を減らすために、ファイル名をより密接に一致させ、各候補PIDが実際に数値であることを確認します。

lsof | awk -v p='^/home/testing/scripts/' '$9~p && $2+0 {print $2}' | sort -u | xargs echo kill

^変数のディレクトリ割り当てはで始まります。また、正規表現の一部として解釈できる文字をエスケープする必要があります(つまり、asなどでマークする必要があります)。awkp.\.*\*

echoスクリプトが実際に終了する準備ができたら削除します。

おすすめ記事