私は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
、最後に数字が多い可能性があるコマンドラインと一致しないようにする必要があります。20
203
答え2
kill $(ps -ef | grep '[s]earch-string' | sed -re 's/[[:blank:]]+/\t/g' | cut -f2)
ps -ef
:パラメータを含むプロセスのリストを取得するgrep
:grepが自動的に検索されないようにするレコードをフィルタリングします[]
。sed -re 's/[[:blank:]]+/\t/g'
: スペースを単一のタブに変換cut -f2
:PIDフィールドの抽出
注:
ps
移植性はあまり良くありません。 1つはposix用、1つはbsd用、1つはsystem-v用です。 Gnuはみんなと互換性があるように努力しているようです。