我使用下面的脚本来查找并杀死进程,但它不知何故无法正常工作。 如果有任何缺陷,请帮助编辑这个。我在忙着JVM。使用AIX机器。
PID=`ps -eaf | grep JVM| grep -v grep | awk '{print $2}'`
if [[ "" != "$PID" ]]
then
echo "killing $PID"
kill $PID
else
echo "PID not found"
fi
答案 0 :(得分:2)
在Unix和类Unix操作系统中,kill是一个常用的命令 向进程发送信号。默认情况下,发送的消息是 终止信号,请求进程退出。但杀人是 一种用词不当的东西;发送的信号可能与之无关 进程杀戮。
所以默认情况下kill发送SIGTERM(相当于kill -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