bashsubprocess的PID(imapsync) – 你如何得到它?

任何人都可以告诉我如何获得在bash中执行的命令的PID。

例如我有一个运行imapsync的bash脚本。

当脚本被杀死时,imapsync进程并不总是被杀死,所以我希望能够从我的脚本中以编程方式识别imapsync的PID,以便我可以在信号处理程序中自己杀死imapsync进程。

那么如何从父bash脚本中编程获取subprocess的PID?

imapsync有一个选项来设置其pid的写入位置:

–pidfile:写入imapsync pid的文件。

any_command args & my_child_PID=$! 

IOW,就像$$持有你的PID, $! 具有最近执行的后台命令的PID。

pidof不同的是, pgrep可以有多种选项来限制它返回PID的进程。 一个可能特别有用的是使用当前进程的PID根据PPID进行select。

 pgrep -P $$ imapsync 

如果它们是脚本的子节点,它将只输出imapsync的PID。

如何把imapsync放在后台,得到PID然后进行前置处理…就像这样:

 imapsync & pid=$! wait $pid retVal=$?