我怎样才能编写一个 Bash 脚本来运行一个长时间运行的程序并将程序进程 ID 存储在单独的文件中?
我想要类似的东西
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
然而,这样做会执行ps
后续操作工具已完成。
有没有办法获取所创建进程的进程 ID?
答案1
您可以轻松地使用“&”在后台运行该进程,然后使用“$!”获取后台进程的 PID。
#!/bin/bash
long_running_tool &
echo $! > pid_file
然后,如果您希望 shell 阻塞直到进程完成执行,则可以选择等待 $!。
答案2
#!/bin/bash
echo $$ > fooapp.pid
exec fooapp
如前面提到的,exec
取代 bash
使用指定的程序,保留PID。