名前でプロセスを終了

名前でプロセスを終了

私はbashを使用して、次のようにPythonプログラムの複数のインスタンスを起動します。

python example.py -id $i

$iインスタンスに割り当てられたIDはどこにありますか?すべてのプロセスは同じユーザーから始まります。プロセスIDを追跡できないと想像してください。コマンド(IDを含む)を呼び出して特定のインスタンスを終了できますか?たとえば、このようなものはpkill 'python example.py -id 2'明らかに機能しません。

答え1

使用pkill -fx:

pkill -fx 'python example.py -id 2'

この-fオプションを使用すると、pkillプロセス名だけでなくコマンドライン全体で一致が発生し、パターンがサブストリング-x(たとえば)ではなくコマンド全体と正確に一致するように強制されますgrep -x。または、など-x、最後に数字が多い可能性があるコマンドラインと一致しないようにする必要があります。20203

答え2

kill $(ps -ef | grep '[s]earch-string' | sed -re 's/[[:blank:]]+/\t/g' | cut -f2)

  1. ps -ef:パラメータを含むプロセスのリストを取得する
  2. grep:grepが自動的に検索されないようにするレコードをフィルタリングします[]
  3. sed -re 's/[[:blank:]]+/\t/g': スペースを単一のタブに変換
  4. cut -f2:PIDフィールドの抽出

注: ps移植性はあまり良くありません。 1つはposix用、1つはbsd用、1つはsystem-v用です。 Gnuはみんなと互換性があるように努力しているようです。

関連情報