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

使用脚本启动nohup java命令并获取进程id RHEL,java,linux,nohup,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时,值是37

我正在尝试使用脚本启动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:~$ 

我找到了。

我就是这么说的,我不适合。注意上面我使用echo$的地方!为了获取进程id,我杀死了37458,但37463仍在运行,因此进程仍在运行。我已经尝试通过编写一个ps的grep脚本并将其传输到awk来解决这个问题,但我认为应该有一种方法可以直接获取另一个pid,因为如果有类似的作业正在运行,我的grep可能会运行错误……文件/文件夹/工具/Linux\u x86\u 64/bin/java的输出是什么?