【问题标题】:Get pid from a java subprocess started with xvfb-run从以 xvfb-run 开始的 java 子进程获取 pid
【发布时间】: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}' &gt; $pidfile 我可以得到它。我会测试以确保我总是得到好的(而且只有一个)。再次感谢...

标签: java linux pid xvfb


【解决方案1】:

使用xvfb-run(例如xvfb-run name_of_script.sh)运行整个脚本,并从eval 行中删除xvfb-run

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多