Shell

直接與間接背景兒童的閱讀行為

  • January 31, 2019

當我做

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

然後使用預設終端設置,作業被停止SIGTTIN

如果我做

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

裡面的read系統呼叫read得到EOF(返回0)`並且不會發生SITTIN停止。

這些行為的解釋是什麼

這是因為在第二種情況下,後台命令將在子shell中執行,並且由於子shell中沒有作業控制,後台模式將通過重定向輸入/dev/null並忽略SIGINTandSIGQUIT信號來偽造。

另請參閱這些答案:

subshel​​l奇怪行為的後台程序

腳本啟動的程序沒有收到 SIGINT

(sleep 123 &) 是否從 bash 的作業控制中刪除程序組?

程序在後台啟動之前被殺死

引用自:https://unix.stackexchange.com/questions/497778