我如何编写一个运行长时间运行的程序并将程序进程 ID 存储在单独文件中的 Bash 脚本?
我想要类似的东西
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Run Code Online (Sandbox Code Playgroud)
但是,正是这样做会ps
在工具完成后执行。
有没有办法获取创建的进程的进程ID?
Jer*_*ant 13
您可以使用“&”轻松地在后台运行该进程,然后使用“$!”获取后台进程的PID
#!/bin/bash
long_running_tool &
echo $! > pid_file
Run Code Online (Sandbox Code Playgroud)
然后,可选地,等待 $! 如果您希望 shell 阻塞直到进程完成执行。
#!/bin/bash
echo $$ > fooapp.pid
exec fooapp
Run Code Online (Sandbox Code Playgroud)
如前所述,exec
替换 bash
为指定的程序,保留PID。