web-dev-qa-db-ja.com

プロセスが実行されている場合にのみ強制終了する方法は?

現在、shスクリプトファイルで次のような行を使用しています。

kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'` 

しかし、プロセス(myServerここ)が実行されている場合にのみ呼び出す方法を疑問に思いますか?

11
myWallJSON

私は通常pgrepとpkillを使用します

if pgrep myServer; then pkill myServer; fi
16
boutch55555

pkillまたはkillallを使用して名前でプロセスを強制終了できます。それらのマニュアルページを確認してください。

9
enzotib

少し異なるアプローチは次のようになります。

killall PROCESS || echo "Process was not running."

これにより、プロセスが存在しない場合、killallコマンドから返される1 Error-Codeが回避されます。 echo部分は、killall1を返し、それ自体が0(成功)を返す場合にのみ動作します。

5
codepleb

R&Dで作成した小さなスクリプト。気に入っていただけるといいけど

#!/bin/bash

echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name  got killed"
else
echo " $proc_name is not running/stopped "
fi

script.shのような名前で保存してから

chmod +x script.sh
./script.sh

次に、プロセス名を指定します。

注:私はこれで何度も試しましたが、それでも問題ありません。

0
rɑːdʒɑ

使用してみてください:

Sudo kill `pidof process_name`

process_nameは、強制終了するプロセスの名前です。これの素晴らしい点は、pidofが指定された名前に一致するすべてのプロセスのpidをリストすることです。 killは複数のpidを受け入れるため、単一の気まぐれでそれらすべてを殺します。

これが役立つかどうか教えてください。

0
amandion

pidofでプロセスが存在するかどうかを確認します。もしそうなら、それを殺します:

(! pidof process_name) || Sudo kill -9 $(pidof process_name)

上記のコマンドを実行した後、終了コードは常に0です。

0
Juuso Ohtonen