次のようなものを使用する場合、呼び出しスクリプトtest.py
とpid自体を除くすべてのPythonスクリプトを終了するためにbashでコマンドを実行するにはどうすればよいですか?grep
ps -ef |grep
pgrep pythonのようなものを使ってgrepプロセスを無視することはできるようですが、test.pyスクリプトをどのように除外しますか?そうすることができるオプションがあることを知っています。grep -v
そうするオプションはありますか?pgrep -v
言う:grepプロセスに加えて - これを実行すると、ps -ef |grep test1.py
この結果を取得するために使用されるgrep pidも取得されます。結果が表示される段階では、プロセスはもう存在しないため、終了したくありません。
答え1
以下を使用できます。
pkill $(pgrep python | grep -xv $(pgrep test.py))
内部の作業は次のとおりです。
- test.pyのPIDを収集します。
pgrep test.py
grep -xv
収集されたリストからPIDを除外する場所にPIDを送信します(-v
この-x
オプションは、行全体(PID)と一致することを意味します)。pgrep python
殺したいPythonスクリプトのリストを集める
必要なPythonプロセスを正確に見つけるには、pgrepを調整する必要があるかもしれませんが、これは基本的な構造です。内部からやり直して状況に合わせて調整してください。
実行して、
pgrep test.py
期待したPIDを正確に見つけたことを確認してください。pgrep -f
より確実にするには、プロセス名全体を一致させるオプションを参照してください。(または同様の)実行で
pgrep python
終了したい「Pythonスクリプト」を見つけます。一緒に集めてください!
答え2
ps
withの使用に関する一般的なヒント。通常、コマンドラインが一致したくgrep
ありません。grep
ps -ef | grep '[t]est'
test
コマンドラインでは一致しますが、test
コマンドライン自体には表示されませんgrep
。
PIDを取得
ps -eo pid,comm | awk 'NF==2 && $2~"\\.py$" && $2!="test.py" { printf "%d ",$1; }'
私はこれが最大16文字のファイル名でのみ機能することに気づきました。