加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

java – 如何在shell变量中捕获系统调用的结果?

发布时间:2020-12-13 19:02:51 所属栏目:Linux 来源:网络整理
导读:我们想要构建一个每晚运行的脚本(杀死并重启java进程).为此,我们需要捕获进程号(因为可能有多个java进程在运行).下面的命令基本上是我们用来获取进程号的命令,可能是在grep末尾有一个正则表达式.除非有更好的建议. root#ps -e |grep 'java'18179 pts/0 00:00

我们想要构建一个每晚运行的脚本(杀死并重启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="" && break
done

# If we haven't stopped,kill the process.
if [ ! -z "$pid" ]; then
    echo "Not stopping; terminating with extreme prejudice."
    kill -9 $pid
fi

确保在完成后删除pid文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读