谁能告诉我如何获取在 bash 中执行的命令的 PID。
例如,我有一个运行 imapsync 的 bash 脚本。
当脚本被终止时,imapsync 进程并不总是被终止,所以我希望能够从我的脚本中以编程方式识别 imapsync 的 PID,以便我可以在信号处理程序中自己终止 imapsync 进程。
那么,如何以编程方式从父 bash 脚本获取子进程的 PID?
答案1
imapsync 有一个选项可以设置其 pid 的写入位置:
--pidfile :写入 imapsync pid 的文件。
答案2
any_command args &
my_child_PID=$!
换句话说,就像$$
保存你的 PID 一样,$!
拥有最近执行的后台命令。
答案3
与 不同pidof
,pgrep
可以给出各种选项来限制它返回哪些进程的 PID。一个可能特别有用的选项是使用当前进程的 PID 根据 PPID 进行选择。
pgrep -P $$ imapsync
如果 imapsync 是你的脚本的子项,则它只会输出 imapsync 的 PID。
答案4
如何将 imapsync 暂时放在后台,获取 PID,然后将其置于前台......就像这样:
imapsync &
pid=$!
wait $pid
retVal=$?