web-dev-qa-db-ja.com

プロセスIDをキャプチャし、存在する場合は強制終了するシェルスクリプト

私はこのコードを試しましたが、機能していません

#!/bin/sh

#Find the Process ID for syncapp running instance

PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
Kill -9 PID
fi

Awkの近くでエラーが表示されています。

提案をお願いします。

57
user1597811

実際にこれを行う最も簡単な方法は、以下のようなkill引数を渡すことです。

ps -ef | grep your_process_name | grep -v grep | awk '{print $2}' | xargs kill

それが役に立てば幸い。

136
Anthony Mutisya

これは私に適しています。

 PID = `ps -eaf | grep syncapp | grep -v grep | awk '{print $ 2}' `
 if [[" "!=" $ PID "]]; then 
 echo "killing $ PID" 
 kill -9 $ PID 
 fi 
13
N Dierauf

これにはコマンドpkillを使用します。

NAME
       pgrep, pkill - look up or signal processes based on name and 
       other attributes

SYNOPSIS
       pgrep [options] pattern
       pkill [options] pattern

DESCRIPTION
       pgrep looks through the currently running processes and lists 
       the process IDs which match the selection criteria to stdout.
       All the criteria have to match.  For example,

              $ pgrep -u root sshd

       will only list the processes called sshd AND owned by root.
       On the other hand,

              $ pgrep -u root,daemon

       will list the processes owned by root OR daemon.

       pkill will send the specified signal (by default SIGTERM) 
       to each process instead of listing them on stdout.

コードがインタープリター(Java、python、...)を介して実行される場合、プロセスの名前はインタープリターの名前になります。引数--fullを使用する必要があります。これは、コマンド名と引数に一致します。

9
guettli

あなたはおそらく書きたいと思った

`ps -ef | grep syncapp | awk '{print $2}'`

しかし、@ PaulRの答えを支持します-killall -9 syncappははるかに優れた代替手段です。

4
Amadan

多くの* NIXシステムには、 pkill(1)killall(1) のいずれかまたは両方があり、名前でプロセスを強制終了できます。それらを使用すると、解析全体のps問題を回避できます。

1
jbr

どこかに来た..それはシンプルで便利だと思った

Crontabでコマンドを直接使用できます。

* * * * * ps -lf | grep "user" |  Perl -ane '($h,$m,$s) = split /:/,$F
+[13]; kill 9, $F[3] if ($h > 1);'

または、シェルスクリプトとして記述できます。

#!/bin/sh
# longprockill.sh
ps -lf | grep "user" |  Perl -ane '($h,$m,$s) = split /:/,$F[13]; kill
+ 9, $F[3] if ($h > 1);'

そして、そのようにcrontabと呼びます、

* * * * * longprockill.sh
0
user3743785

これにより、強制終了できるgrepに一致するすべてのプロセスが強制終了されます。

-9は「強制終了できるすべてのプロセスを強制終了する」ことを意味します。

kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}')
0
EvR2f
#!/bin/sh

#Find the Process ID for syncapp running instance

PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
--->    Kill -9 PID
fi

これが役立つかどうかはわかりませんが、「kill」のスペルが正しくありません。大文字です。

代わりに「kill」を試してください。

0
AnonManon