java - 使用脚本启动 nohup java 命令并获取进程 ID RHEL

标签 java linux nohup

我正在尝试使用脚本来启动 nohup 命令。我用 Java 编写了一个测试程序,通过脚本 TestScript.java 启动。我的脚本包含以下内容:

#!/bin/bash
cd /home/user/ejava
nohup java TestScript > TestScript.out &
echo $! > /home/user/ejava/TestScript.pid

我用 echo $!获取最后一个进程 ID 并将其存储到临时文件中。当我查看 TestScript.pid 时,该值为 37458。

当我运行'ps -elf | grep TestScript',我得到:

0 S user    37458     1  0  80   0 -  1065 rt_sig 11:51 pts/0    00:00:00 /bin/ksh /folder/tools/Linux_x86_64/bin/java TestScript
0 S user    37463 37458  0  80   0 - 8813549 futex_ 11:51 pts/0  00:00:00 /folder/tools/Linux_x86_64/bin/../java/jre_Linux_x86_64/bin/java TestScript
0 S user    37516 36224  0  80   0 -  1595 -      11:52 pts/0    00:00:00 grep TestScript

如果我终止作业 37458,则 37463 仍在运行并且我的 nohup 输出仍在更新。工作没有被杀死。

如何获取返回的进程 ID 37463(或与其中包含 futex 的命令相关的任何内容),以便我可以将其存储在文件中,然后使用它通过另一个脚本终止进程?我宁愿不必搜索进程 ID,而是让某个进程返回它。

最佳答案

如果您在后台使用命令末尾的“&”字符启动您的进程,那么 shell 变量 !填充了您要查找的 pid:

john@ubuntu:~$ nohup java -cp . Tst > tst.out 2>&1 &
[1] 6901
john@ubuntu:~$ echo $!
6901
john@ubuntu:~$ ps -ef | grep java
john      6901  4844  0 09:27 pts/12   00:00:00 java -cp . Tst
john      6913  4844  0 09:27 pts/12   00:00:00 grep --color=auto java
john@ubuntu:~$ 

我找到了 here .

关于java - 使用脚本启动 nohup java 命令并获取进程 ID RHEL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295319/

相关文章:

linux - 如何在 nohup 模式下解压文件

python - 将四个并行运行的python程序的输出保存到不同的日志文件

java - 应该优先使用Java 9 Cleaner而不是定稿吗?

java - 图像处理应用程序的内存使用情况

linux - 找到 : paths must precede expression

linux - 为什么在流套接字上使用的 recvfrom() 会返回零地址和端口?

java - 带有枚举的 nullPointerException

java - A* 搜索实现

linux - 共享对象文件的 rpath

linux - nohup 或 disown 是否适用于批处理脚本?