如何在没有作业命令的情况下获取子进程 ID



好的,所以我正在使用一个需要尽可能可移植的 shell 脚本,我想确保我可以使用trap命令干净地整理任何子进程。

现在,在更新的平台上,jobs -p命令可用于获取子进程 ID 的列表,适合直接放入kill命令中,以便毫不费力地整理内容。

但是,某些环境没有此功能。为了解决这个问题,我使用了一个变量,我将进程 ID 扔进去,但它很混乱,拼写错误可能导致部分或所有子进程在应该被杀死时没有被杀死。

那么,在没有jobs命令的情况下,还有什么选择呢?或者换句话说,杀死脚本的所有子进程的最兼容方法是什么?

为了让你了解潜在的限制;我需要使用的最基本的系统没有pgrep,只有一个基本版本的ps只支持-w标志。它确实可以访问/proc/$$/下的特殊文件,但我不确定如何处理这些文件(它们中的任何一个甚至列出了子进程吗?这是困难的很大一部分,因为许多类似的问题列出了使用我无法访问的工具的解决方案,我只是喜欢兼容性问题=)

You can get the child pid using `!`
$!

最新更新