追加読書

追加読書

tmuxについて質問した質問に対する答えを理解するのが難しいです。具体的には、擬似端末が終了したときに子プロセスに実行することです。

元の質問

提出しましたtmuxのGitHub問題トラッカーに関する問題:

tmuxで次の動作を観察します。シェル起動スクリプト(例えば、 .bashrcまたは.profile

# ~/.bashrc

if [ -n "$TMUX" ]; then
  sleep 100 &
fi

その後、tmux が終了するとプロセスは終了します。つまり、tmuxを起動した後、1)次のようにpgrep sleepPIDを取得できます。 2) tmux セッションから切り離した後もまだ表示されますが、3) tmux セッションを完全に終了すると、もはや存在しません。

一方sleep 100 &、コマンドプロンプト(tmux内)から手動で実行すると、tmuxが終了した後も持続します。ベアターミナルでsleep 100 &via を呼び出すと、.bashrcシェルが終了した後も持続します。


  • ティモックス v2.6
  • macOS 10.11 エルキャピタン
  • バッシュ v4.4.12(1)

公式の答え

ニコラス・マリオットはこう答えました。

tmux は pty マスターを終了します。ここで関連が終わり、残りはプロセス自体とカーネルに依存します。自己管理されていないバックグラウンドプロセスが親プロセスの終了後も確実に維持されるようにするには、nohupを使用する必要があります。

新しい質問

@nicmの答えは、元の質問で説明した動作をどのように説明しますか?

つまり、ptyがコマンドラインで手動で生成された.bashrcサブプロセスと/によって生成されたサブプロセスを異なる方法で処理するのはなぜですか?.profile(またはptyマスターが終了したときに前者が終了し、後者が終了しないのはなぜですか?)ptyマスターを終了することは、単に端末エミュレータを終了するのとどう違いますか?

ベストアンサー1

M. Marriottの説明は次のとおりです。tmuxはこれの原因ではありません

あなたが見るものの説明他の場所に位置systemd-logind特にセッションリーダープログラム、ターミナルコントロール、ブレークシグナル、タスクコントロールシェル、ラインルール設定、および(システムLinuxオペレーティングシステムの場合)ミックスに導入された愚かな高度な機能です。

追加読書

おすすめ記事