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

时间:2015-12-15 17:10:33

标签: 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,而是通过某个进程返回它。

1 个答案:

答案 0 :(得分:0)

如果你在后台使用命令末尾的&符号开始你的进程,那么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