Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取此Java应用程序的PID?_Java_Jenkins_Daemon - Fatal编程技术网

如何获取此Java应用程序的PID?

如何获取此Java应用程序的PID?,java,jenkins,daemon,Java,Jenkins,Daemon,我的(Ubuntu)服务器上有一个java应用程序。如果我这样做,那么它将正确启动: /usr/bin/java -cp /home/jenkins/veta/lily.jar com.sugarapp.lily.Main 但我不知道如何得到它的PID。我不知道如何用init.d脚本阻止它 我有一个不同的应用程序,是用Clojure编写的,因此我能够编写一个非常有效的init.d脚本。因此,我尝试为我的Java应用程序重构init.d脚本,结果如下: WORK_DIR="/home/jenk

我的(Ubuntu)服务器上有一个java应用程序。如果我这样做,那么它将正确启动:

/usr/bin/java -cp /home/jenkins/veta/lily.jar com.sugarapp.lily.Main 
但我不知道如何得到它的PID。我不知道如何用init.d脚本阻止它

我有一个不同的应用程序,是用Clojure编写的,因此我能够编写一个非常有效的init.d脚本。因此,我尝试为我的Java应用程序重构init.d脚本,结果如下:

WORK_DIR="/home/jenkins/veta"
NAME="lily"
JAR="lily.jar"
USER="jenkins"
DAEMON="/usr/bin/java"
DAEMON_ARGS=" -cp /home/jenkins/veta/lily.jar com.sugarapp.lily.Main"

start () {
  echo "Starting lily..."
  if [ ! -f $WORK_DIR/lily.pid ]; then
    /sbin/start-stop-daemon --start --verbose --background --chdir $WORK_DIR --exec $DAEMON --pidfile $WORK_DIR/lily.pid --chuid "$USER" --make-pidfile -- $DAEMON_ARGS
  else
    echo "lily is already running..."
  fi
}

stop () {
    echo "Stopping lily..."
    /sbin/start-stop-daemon --stop --exec $DAEMON --pidfile $WORK_DIR/lily.pid
    rm $WORK_DIR/lily.pid
}
但这不起作用。尽管$WORK\u DIR/lily.PID中的PID在每次运行脚本时都会发生变化,但似乎没有任何进程运行过该PID。如果我尝试:

ps aux | grep java
我没有看到这个应用程序,如果我尝试使用PID也没有

那么,有没有一种方法可以使用第一个命令,但以某种方式捕获PID,以便存储它以备将来使用

我只是想要一个可靠的方法来停止和启动这个应用程序。这可以通过PID或其他因素实现。我愿意接受建议

更新:


也许我的问题不清楚?像JP或ps之类的东西会给我太多的答案。如果我执行类似于“ps aux | grep java”的操作,我将看到服务器上运行着5个不同的java应用程序。启动-停止守护进程不知道哪个PID属于这个特定的应用程序,我也不知道应该将什么输入到init.d脚本中

如果您的系统安装了jdk,则有一个名为jps的实用程序驻留在jdk/bin中。它将显示正在运行的java进程的列表。利用它


如果您的计算机中没有安装jdk,那么您必须从ps-eaf命令grep java进程。

如果您希望从命令行获得pid,这可能会起作用:

myCommand & echo $!

我从ServerFault中的一个非常类似的主题的已接受响应中复制了它:

要添加到答案中的可能重复项,下面是在jps不可用时使用的命令:ps-eaf | grep javajps和ps给我太多答案。如果服务器上运行7个Java应用程序,jps将列出所有7个。我需要能够找出这个命令生成的PID:/usr/bin/java-cp/home/jenkins/veta/lily.jar com.sugarapp.lily.Main,只有这样我才能在init.d脚本中使用它。