执行以下方法
$ (sleep 123 &)
$ jobs
$
sleep 123
从 bash 中删除进程组工作控制?上面的方式和disown
然后有什么区别呢?请注意,该sleep 123
进程仍然位于由现在消失的子 shell 领导的同一进程组中,并且与交互式 shell 位于同一进程会话中,因此共享相同的控制终端。
不在 shell 的作业控制中是否说明该sleep 123
进程不会收到 bash 进程发送的任何信号(包括 SIGHUP)?
谢谢。
答案1
是的,可以这么说,它删除了它。
当您从交互式 bash 脚本运行(...)
子 shell 时,会创建一个新的进程组(作业),该进程组将成为终端上的前台进程组,并且在子 shell 包含任何由 终止的命令的情况下&
,(例如sleep 3600 &
)该命令将在非常相同的前台进程组,其中SIGINT
和SIGQUIT
被忽略,并且其输入从/dev/null
) 重定向。看这里一些指向该标准的链接。
当(...)
子 shell 退出时,该前台作业将从 shell 的作业表中删除,并且该sleep 3600
命令将在 shell 的控制之外继续运行。
(sleep 3600 &)
这与从非交互式运行的情况完全不同脚本没有作业控制,其中所有内容(主 shell、其(...)
子 shell 以及子 shellfoo &
内部或外部的任何“后台”命令 ( ) (...)
)都在同一进程组中运行。