tmuxについて質問した質問に対する答えを理解するのが難しいです。具体的には、擬似端末が終了したときに子プロセスに実行することです。
元の質問
提出しましたtmuxのGitHub問題トラッカーに関する問題:
tmuxで次の動作を観察します。シェル起動スクリプト(例えば、
.bashrc
または.profile
)# ~/.bashrc if [ -n "$TMUX" ]; then sleep 100 & fi
その後、tmux が終了するとプロセスは終了します。つまり、tmuxを起動した後、1)次のように
pgrep sleep
PIDを取得できます。 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オペレーティングシステムの場合)ミックスに導入された愚かな高度な機能です。