当我这么做
( sleep 1; read x ; echo x=$x; echo done ) &
然后,使用默认的终端设置,作业将由SIGTTIN
停止。
如果我做了
( ( sleep 1; read x ; echo x=$x; echo done ) & )
read
syscall在read
中获取EOF (返回0)`,并且不会发生SITTIN停止的情况。
这些行为的解释是什么?
发布于 2019-01-30 12:57:59
这是因为在第二种情况下,背景命令将在子subshell中运行,并且由于子subshell中没有作业控制,后台模式将通过重定向来自/dev/null
的输入而忽略SIGINT
和SIGQUIT
信号来伪造。
另见以下答复:
https://unix.stackexchange.com/questions/497778
复制