请问如何在BASH Unix Shell中使用新的进程组ID生成新进程?谢谢!
setsid emacs xxx.txt &
setsid setsid emacs xxx.txt
... 的原因如下:
当 bash 在脚本中调用 setsid 时,setsid 会保留 bash 解释器进程的进程组 ID,因此:
setsid emacs xxx.txt
... 会阻塞(详见链接的文章)。但在运行 emacs 前,它确实设置了一个新的进程组。
你可以使用 '&' 将其放入后台:
setsid emacs xxx.txt &
... 但这会留下竞争条件,即在 setsid 更改进程组之前,调用脚本可能已经退出(这可能会杀死子进程)。
也就是说,当我们将 setsid 翻倍时,顺序如下:
如果你想要从 脚本内部 与命令通信并等待其退出,请参阅 bash 手册中的 subprocess。