
私がするとき
( 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
これは、2番目のケースでは、バックグラウンドコマンドがサブシェルで実行され、サブシェルにジョブ制御がないため、入力をリダイレクトし、/dev/null
信号SIGINT
を無視してSIGQUIT
バックグラウンドモードを偽造するためです。
次の回答も参照してください。
スクリプトで開始されたプロセスが SIGINT を受信できませんでした。