
我们想要构建一个每晚运行的脚本(杀死并重启java进程).为此,我们需要捕获进程号(因为可能有多个java进程在运行).下面的命令基本上是我们用来获取进程号的命令,可能是在grep末尾有一个正则表达式.除非有更好的建议.
root#ps -e |grep 'java'18179 pts/0 00:00:43 java我们想知道如何解析上面的输出并将其转换为shell变量,因此我们可以使用kill命令,如下所示.
kill -9 ${processID}wait 10注1:我们不能依赖正常服务停止命令的原因是因为进程有时不想死.我们必须手动使用kill命令.最佳答案有几种方法可以解决这个问题.如果你正在使用bash,那么shell变量’$!’将包含最后一个分叉子进程的PID.因此,在启动Java程序之后,执行以下 *** 作:
echo $! > /var/run/my-process.pID然后,在init脚本停止Java进程之后:
# Get the pIDfile.pID=$(cat /var/run/my-process.pID)# Wait ten seconds to stop our process.for count in $(1 2 3 4 5 6 7 8 9 10); do sleep 1 cat "/proc/$pID/cmdline" 2>/dev/null | grep -q java test $? -ne 0 && pID="" && breakdone# If we haven't stopped,kill the process.if [ ! -z "$pID" ]; then echo "Not stopPing; terminating with extreme prejudice." kill -9 $pIDfi确保在完成后删除pID文件. 总结
以上是内存溢出为你收集整理的java – 如何在shell变量中捕获系统调用的结果?全部内容,希望文章能够帮你解决java – 如何在shell变量中捕获系统调用的结果?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)