:UnixやUnixライクなオペレーティングシステムで
、殺すプロセスにシグナルを送る に使用されるコマンドです。デフォルトでは、送信されるメッセージは 終了シグナルで、プロセスが終了するように要求します。しかし、殺すことは なのである。送信された信号はプロセスの終了時に とは何の関係もない可能性があります。デフォルトキルによってそう
SIGTERM(-15を殺すために相当)は、おそらくSIGKILLを行う必要がありますが送信されます。
kill -9 $PID
たり、余分な慎重になっているか、正常にシャットダウンするシステムが必要な場合SIGINTはキーボードのCtrl-Cと同じように使用することをお勧めします。だから、
kill -2 $PID
Javaアプリケーションは、私は、彼らがシャットダウン・フックで良い行動に依存しているdoesn't always handle SIGTERM correctly怖いです。アプリが正常にSIGTERMのような信号を扱う必ず直接SIGTERM信号処理できるようにするには:ここでは完全を期すため
public class CatchTerm {
public static void main(String[] args) throws Exception {
Signal.handle(new Signal("TERM"), new SignalHandler() {
public void handle(Signal sig) {
//handle sigterm such as System.exit(1)
}
});
Thread.sleep(86400000);
}
}
を、より高度なプロセス選択のためcommon signals
| Signal | ID | Action | Description | Java
| --- | --- | --- | --- | ---
| SIGHUP | 1 | Terminate | Hangup | The application should reload any config
| SIGINT | 2 | Terminate | Ctrl-C | Keyboard interrupt, start clean shutdown
| SIGQUIT | 3 | Terminate | Terminal quit signal | JVM traps and issues a Thread dump
| SIGABRT | 6 | Terminate | Process abort signal | Do not handle, quit immediately
| SIGKILL | 9 | Terminate | Kill (forced) | Cannot be trapped
| SIGTERM | 15 | Terminate | Termination signal. | Quit quickly, safe but fast
はkillallとpkillを参照してくださいされています
'if 'は' [["x"!= "x $ PID"]] 'として書かれている方が良いでしょう。これは'!= 'が文字列の比較に使われることを保証します(ボーナスとして、 'クエリーは異なるシェルで正しく処理されます)。 – grochmal
コードは基本的に正しいと思われます。「ショーウショウは機能していません」という意味を具体的に説明することはできますが、そのプロセスが殺人から生き残ったと仮定します。 Neil Ellisの答えが役に立たない場合は、もっと説明する必要があります。 - ps出力から文字列を修正するとき、私は 'ps -eaf | grepコマンドが正規表現 –