吹くman
set
以下に説明するオプションはサブセクションにリストされています-m
。
モニターモード。ジョブ制御が有効になりました。このオプションは、それをサポートするシステムの対話型シェルに対してデフォルトで有効になっています(上記のタスク制御を参照)。バックグラウンドプロセスは別のプロセスグループで実行され、完了すると終了ステータスを含む行を印刷します。
(リンク先のページで検索するには、「モニターモード」で検索してください。
問題は、このモデルが可能かどうかです。効果的にBashセッション中に閉じる、実行する方法、予想される結果は何ですか?私はそれを試してみましたが、これまでの結果はありません。
私はこのコマンドを知っていますがset +m
、その原因は何ですか?ジョブ制御を無効にしますか?タスク完了メッセージと終了メッセージを無音に設定しますか?
答え1
set +m
モニタモード(タスク制御とも呼ばれます)を無効にしますが、それほど効果がなく、ほとんど役に立つ効果ではありません。監視モードがオフの状態でバックグラウンドジョブが開始されると、そのジョブは適切ではなく、ジョブが終了、停止、またはfg
再開bg
されると、シェルはメッセージを印刷したりSIGCLDトラップを実行したりしません。
最も有用な違いは、監視モードのためにパイプラインが独自のシステムで実行されることです。プロセスグループ。これは、プロセスグループ全体を終了する場合に便利な考慮事項です。ウォッチドッグモードを無効にすると、シェルを終了するプロセスグループもそのサブプロセスを終了します。監視モードが有効になると、各パイプは独自のグループになり、グループは独立してシャットダウンできます。
bash-4.3$ セット-m bash-4.3$ sleep1111& [1]17526 bash-4.3$ セット+m bash-4.3$ sleep2222& [2]17527 bash-4.3$ ps -o pid,ppid,pgid,sid,cmd 17526 17527 PID PPID PGID SID CMD 175261752517526 7773 睡眠 1111 1752717525 17525 7773睡眠2222
答え2
モニタモードを無効にするには、次を実行します。
set +m
たとえば、
$ echo $SHELLOPTS
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
$ set +m
$ echo $SHELLOPTS
braceexpand:emacs:hashall:histexpand:history:interactive-comments