名前によるbash killプロセス

名前によるbash killプロセス

名前でプロセス(およびサブプロセス)を閉じようとしました(両方ともこのサイトからインポートして適用しました)。

read -p "Set process name: " PS

# first option
f() { ps ax | grep "$1" | grep -v grep | awk '{print $1}' | xargs kill -9; }
f $PS

# second option
for pid in $(ps -ef | awk '/$PS/ {print $2}'); do kill -9 $pid; done

# end of bash
if [  $? -gt 0 ]; then
   echo "no process:" $PS
else
   echo "Finished"
fi

しかし、どちらのどちらがより効率的かはわかりません(または上記のいずれでもありません)。

また、2番目のループは完了しませんが(つまり、プロセスがない場合は「no process:」プロセス名で終了する必要があります)、すぐに「Finished」に移動します。

killどちらの場合もコマンドの問題があります。プロセスが存在しない場合、kill の使用オプションを示すメッセージが表示されます。&> /dev/nullorで隠すことができますが、出力を沈黙させるフラグ(スイッチ)があるかどうかはset +m, set -mわかりません。kill

修正する:

@steeldriverのおかげで、awkが変数(/ $ PS /)を許可しないというエラーが表示されたため、このソリューションを見つけました。ここ:

これを交換してください:

for pid in $(ps -ef | awk '/$PS/ {print $2}'); do kill -9 $pid; done

これで:

for pid in $(ps -ef | grep "$PS" | awk '{print $2}'); do kill -9 $pid; done

関連情報