` (sleep 123 &)` 是否从 bash 的作业控制中删除进程组?

` (sleep 123 &)` 是否从 bash 的作业控制中删除进程组?

执行以下方法

$ (sleep 123 &)
$ jobs
$ 

sleep 123从 bash 中删除进程组工作控制?上面的方式和disown然后有什么区别呢?请注意,该sleep 123进程仍然位于由现在消失的子 shell 领导的同一进程组中,并且与交互式 shell 位于同一进程会话中,因此共享相同的控制终端。

不在 shell 的作业控制中是否说明该sleep 123进程不会收到 bash 进程发送的任何信号(包括 SIGHUP)?

谢谢。

答案1

是的,可以这么说,它删除了它。

当您从交互式 bash 脚本运行(...)子 shell 时,会创建一个新的进程组(作业),该进程组将成为终端上的前台进程组,并且在子 shell 包含任何由 终止的命令的情况下&,(例如sleep 3600 &)该命令将在非常相同的前台进程组,其中SIGINTSIGQUIT被忽略,并且其输入从/dev/null) 重定向。看这里一些指向该标准的链接。

(...)子 shell 退出时,该前台作业将从 shell 的作业表中删除,并且该sleep 3600命令将在 shell 的控制之外继续运行。

(sleep 3600 &)这与从非交互式运行的情况完全不同脚本没有作业控制,其中所有内容(主 shell、其(...)子 shell 以及子 shellfoo &内部或外部的任何“后台”命令 ( ) (...))都在同一进程组中运行。

相关内容