【发布时间】:2013-02-26 16:49:15
【问题描述】:
我正在尝试获取使用 xvfb-run 启动的 java 进程的 PID。在没有 xvfb-run 的情况下启动时,我使用 $!获取最后一个后台进程的 PID,但是一旦我使用 xvfb-run,我显然得到了 xvfb-run 的 PID。
代码如下:
#! /bin/bash
logfile=/var/log/SleepTest.log
pidfile=/var/run/SleepTest.pid
command="java -jar /data/test/SleepTest.jar"
( eval exec -c xvfb-run $command < /dev/null >> $logfile 2>&1 ) &
$! > $pidfile
如果我删除倒数第二行中的 xvfb-run 部分,一切正常(除了我没有显示和程序崩溃的部分)。我可能不得不使用“()”和“&”,但我不是专家。
程序 SleepTest.jar 是我编写的一个小程序,所以我不必处理真实的事情。它只睡 2 分钟。
对于那些想知道我为什么使用 xvfb-run 的人,这是因为我需要启动的 java 应用程序使用 SWT,而我的服务器上没有显示。
对于那些想知道为什么我需要进程的 pid 的人,这是因为我想创建一个 init.d 文件来启动|停止|状态我的应用程序
那么有没有简单的方法来获取呢?
【问题讨论】:
-
您可以使用
ps -ef | grep SleepTest.jar | cut ...。您将不得不修补剪切部分,因为它在操作系统中有所不同。您可能想要验证父 pid 是否是您从 $!... 获得的 pid... -
如果我不能“干净”地获得它,我可能会退回到类似的东西。谢谢。
-
好的,所以使用命令:
ps -ef | grep SleepTest.jar | grep $! | sed -e '1d' | awk '{print $2}' > $pidfile我可以得到它。我会测试以确保我总是得到好的(而且只有一个)。再次感谢...