名前でプロセス(およびサブプロセス)を閉じようとしました(両方ともこのサイトからインポートして適用しました)。
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/null
orで隠すことができますが、出力を沈黙させるフラグ(スイッチ)があるかどうかは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