76

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

#!/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の近くでエラーを表示しています。

任意の提案をお願いします。

4

11 に答える 11

15

これには次のコマンドを使用します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 を使用する必要があります。これは、コマンド名と引数に対して一致します。

于 2016-05-26T10:14:24.890 に答える
5

あなたはおそらく書きたかった

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

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

于 2012-12-17T07:46:01.367 に答える
1

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

于 2013-10-02T14:04:17.810 に答える
1

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

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

kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}')
于 2016-06-08T12:21:44.343 に答える
0

どこかで出くわした..シンプルで便利だと思った

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
于 2014-07-06T09:22:31.363 に答える
0
Kill -9 PID

する必要があります

kill -9 $PID

違いを見ます?

于 2016-07-08T09:10:35.913 に答える