bash 子进程的 PID (imapsync) - 你是如何得到它的?

Jas*_*Tan 15 bash pid imapsync

谁能告诉我如何获取在 bash 中执行的命令的 PID。

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

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

那么如何以编程方式从父 bash 脚本中获取子进程的 PID?

Jav*_*ier 46

any_command args &
my_child_PID=$!
Run Code Online (Sandbox Code Playgroud)

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

  • 如果它对孩子进行分叉和背景化,则父母有责任将孩子的 PID 保存在某处。通常的做法是将它保存在类似 `/var/run/whatever.pid` 的地方。也许有一个命令行选项可以要求它在某处保存 PID;如果没有,这听起来像是询问作者或自己实现的功能。 (6认同)

Den*_*son 10

与 不同pidofpgrep可以提供多种选项来限制其返回 PID 的进程。一种可能特别有用的方法是使用当前进程的 PID 基于 PPID 进行选择。

pgrep -P $$ imapsync
Run Code Online (Sandbox Code Playgroud)

如果 imapsync 的 PID 是您脚本的子代,它只会输出它们。


小智 4

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

--pidfile :写入 imapsync pid 的文件。