Bash Shell脚本无法终止进程
我正在使用下面的脚本来查找和终止进程,但不知何故它不起作用。 如果有任何缺陷,请帮助编辑此文件。我在变灰。使用AIX机器Bash Shell脚本无法终止进程,bash,shell,unix,process,aix,Bash,Shell,Unix,Process,Aix,我正在使用下面的脚本来查找和终止进程,但不知何故它不起作用。 如果有任何缺陷,请帮助编辑此文件。我在变灰。使用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" f
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
从:
在Unix和类似Unix的操作系统中,kill是用于
向进程发送信号。默认情况下,发送的消息是
终止信号,请求进程退出。但是杀戮是
有点用词不当;发送的信号可能与此无关
进程终止
因此,默认情况下,kill发送SIGTERM(相当于kill-15),您可能需要执行SIGKILL:
kill -9 $PID
或者,如果您特别小心,或者需要系统正常关闭,那么我建议您使用SIGINT,因为它与键盘上的Ctrl-C相同。所以
kill -2 $PID
我担心Java应用程序依赖于关闭挂钩中的良好行为。要确保应用程序正确处理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);
}
}
为了完整起见,以下是
有关更高级的流程选择,请参见和:如果
更好地写成如果[[“x”!=“x$PID”]
,这将确保=代码>用于字符串比较(作为奖励,它还确保在不同的shell上正确处理空的grep
查询)。代码看起来基本上是正确的-您可以详细说明“shomehow not working”的意思,但我们假设该过程在终止后仍然有效。如果尼尔·埃利斯的答案对你没有帮助,你就必须解释更多当从ps输出中对修复字符串进行grepping时,我所做的工作类似于ps-eaf | grep'[J]VM'
。。这不需要grep-vgrep
,因为grep命令与regexSIGKILL
(kill-9…
)不匹配,通常不建议使用,因为它无法被进程捕获,也无法进行清理。这很奇怪。我删除了sh文件,并用相同的脚本再次创建了它,它成功了。现在我有一个问题,因为这个脚本将只捕获jvm的一个pid,但是在杀死一个pid之后,另一个pid正在生成。如何修改此现有脚本以杀死所有泛型pid直到全部被杀死?@RishuAkillall JVM
?当然,但是大多数Java进程的信号处理都很差。在使用Java 15年之后,我还没有损坏任何东西,我见过的大多数Java生产环境也使用-9。这与其说是一个实际的风险,不如说是一个“正确性”问题。要成为一个好公民,你可以使用SIGINT或:-SIGINT,停顿,SIGKILL.@Rishua
| 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