如何获取后台进程的进程ID?

新手上路,请多包涵

我从我的 shell 脚本启动一个后台进程,我想在我的脚本完成时终止这个进程。

如何从我的 shell 脚本中获取此进程的 PID?据我所见,变量 $! 包含当前脚本的 PID,而不是后台进程。

原文由 Volodymyr Bezuglyy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 729
2 个回答

启动时需要保存后台进程的PID:

 foo &
FOO_PID=$!
# do other stuff
kill $FOO_PID

您不能使用作业控制,因为这是一项交互功能并且与控制终端相关联。脚本不一定要连接终端,因此作业控制不一定可用。

原文由 camh 发布,翻译遵循 CC BY-SA 2.5 许可协议

您可以使用 jobs -l 命令来获取特定的 jobL

 ^Z
[1]+  Stopped                 guard

my_mac:workspace r$ jobs -l
[1]+ 46841 Suspended: 18           guard

在这种情况下,46841 是 PID。

help jobs

-l 报告作业的进程组 ID 和工作目录。

jobs -p 是另一个仅显示 PID 的选项。

原文由 jldupont 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题