直接与间接背景的儿童在阅读时的行为

直接与间接背景的儿童在阅读时的行为

当我做

( sleep 1; read x ; echo x=$x; echo done ) & 

然后使用默认的终端设置,作业将被停止SIGTTIN

如果我做

( ( sleep 1; read x ; echo x=$x; echo done ) & )

read内部的系统调用得到readEOF(返回 0)`并且不会发生 SITTIN 停止的情况。

这些行为的解释是什么

答案1

这是因为在第二种情况下,后台命令将在子 shell 中运行,并且由于子 shell 中没有作业控制,因此将通过重定向输入/dev/null并忽略SIGINTSIGQUIT信号来伪造后台模式。

另请参阅这些答案:

subshel​​l奇怪行为的后台进程

脚本启动的进程未收到 SIGINT

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

进程在后台启动之前被终止

相关内容