このコードを試しましたが、機能しません
#!/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の近くでエラーを表示しています。
任意の提案をお願いします。
これには次のコマンドを使用します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 を使用する必要があります。これは、コマンド名と引数に対して一致します。
あなたはおそらく書きたかった
`ps -ef | grep syncapp | awk '{print $2}'`
しかし、私は@PaulRの答えを支持します-killall -9 syncapp
はるかに優れた代替手段です。
多くの *NIX システムには、名前でプロセスを強制終了できるpkill(1)とkillall(1 ) のいずれかまたは両方もあります。ps
それらを使用すると、解析の問題全体を回避できます。
これにより、強制終了が許可されている grep に一致するすべてのプロセスが強制終了されます。
-9 は、「強制終了できるすべてのプロセスを強制終了する」という意味です。
kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}')
どこかで出くわした..シンプルで便利だと思った
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
Kill -9 PID
する必要があります
kill -9 $PID
違いを見ます?