我正在尝试使用脚本启动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,而是通过某个进程返回它。
答案 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。