PIDを取得

PIDを取得

次のようなものを使用する場合、呼び出しスクリプトtest.pyとpid自体を除くすべてのPythonスクリプトを終了するためにbashでコマンドを実行するにはどうすればよいですか?grepps -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))

内部の作業は次のとおりです。

  1. test.pyのPIDを収集します。pgrep test.py
  2. grep -xv収集されたリストからPIDを除外する場所にPIDを送信します(-vこの-xオプションは、行全体(PID)と一致することを意味します)。
  3. pgrep python殺したいPythonスクリプトのリストを集める

必要なPythonプロセスを正確に見つけるには、pgrepを調整する必要があるかもしれませんが、これは基本的な構造です。内部からやり直して状況に合わせて調整してください。

  1. 実行して、pgrep test.py期待したPIDを正確に見つけたことを確認してください。pgrep -fより確実にするには、プロセス名全体を一致させるオプションを参照してください。

  2. (または同様の)実行でpgrep python終了したい「Pythonスクリプト」を見つけます。

  3. 一緒に集めてください!

答え2

pswithの使用に関する一般的なヒント。通常、コマンドラインが一致したく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文字のファイル名でのみ機能することに気づきました。

関連情報