在 shell 中获取进程 ID 而不保存到临时文件

在 shell 中获取进程 ID 而不保存到临时文件

嗨,linux/bash 专家,

我想要一种通用的方法来获取先前运行的进程的进程 ID。

我知道我能做到这一点:

# child_script
myprocess & pid=$! && echo $pid

但是我想将 pid 传递给父 shell 脚本中的另一个变量。

# parent_script
myvar=$(bash child_script.sh)

这一切都很好。但如果 myprocess 运行很长时间,比如服务器进程,那么最后一个进程中的 subprocess 命令就会挂起(例如,Bash 后台进程仍然阻止子 shell 中的脚本流)另外,我不想将长时间运行的进程的 stderr/stdout 指向 /dev/null,因为我想监视它。

因此,一个黑客方法是将 pid 保存在临时文件中

# child_script
myprocess & echo $! > /tmp/pid.txt

然后在外表上,我确实

# parent_script
pid=$(cat /tmp/pid.txt)

但这显然是黑客行为。有办法避免这样做吗?这是我使用 bash/shell 这么多年之后唯一的抱怨。谢谢!

相关内容