当我做
( sleep 1; read x ; echo x=$x; echo done ) &
然后使用默认的终端设置,作业将被停止SIGTTIN
。
如果我做
( ( sleep 1; read x ; echo x=$x; echo done ) & )
read
内部的系统调用得到read
EOF(返回 0)`并且不会发生 SITTIN 停止的情况。
这些行为的解释是什么
答案1
这是因为在第二种情况下,后台命令将在子 shell 中运行,并且由于子 shell 中没有作业控制,因此将通过重定向输入/dev/null
并忽略SIGINT
和SIGQUIT
信号来伪造后台模式。
另请参阅这些答案: