我正在使用下面的脚本来查找并终止进程,但它不知何故不起作用。 如果有任何缺陷,请帮助编辑。我正在 grep 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
最佳答案
来自Wikipedia entry :
In Unix and Unix-like operating systems, kill is a command used to send a signal to a process. By default, the message sent is the termination signal, which requests that the process exit. But kill is something of a misnomer; the signal sent may have nothing to do with process killing.
因此,默认情况下,kill 会发送 SIGTERM(相当于kill -15),您可能需要执行 SIGKILL:
kill -9 $PID
或者,如果您格外谨慎或者需要系统正常关闭,那么我建议您使用 SIGINT,因为它与键盘上的 Ctrl-C 相同。所以
kill -2 $PID
恐怕是 Java 应用程序 doesn't always handle SIGTERM correctly它们依赖于关闭 Hook 中的良好行为。为了确保应用程序正确处理 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
关于bash - Shell 脚本无法杀死进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37554326/