任何人都可以告诉我如何获得在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=$?