SSHセッションが終了したら、すべてのtmuxセッションが終了していることを確認してください。

SSHセッションが終了したら、すべてのtmuxセッションが終了していることを確認してください。

まず、混乱を予想してください。これは実際に一般的なtmuxの質問と反対の質問です。

SSHトンネルが失敗してもtmuxセッションが漏洩しないようにする方法同じSSHセッションで複数のシェルを実行しているときに1つの端末でセッションとtmuxインスタンスを完全に終了すると、他の端末からtmuxインスタンスが漏洩する可能性があります。たとえば、いくつかの背景ウィンドウに隠されたリソース消費プロセスを終了することを忘れた場合、これはあらゆる種類の問題を引き起こす可能性があります。クールではありません。

私はtmuxをほとんど排他的に端末エミュレータとして使用し、「分離」機能はほとんど使用しません。端末の単一のSSHセッションを介して同じシステムにアクセスする複数のtmuxインスタンスを持つことは珍しいことではありません。バックグラウンドプロセスを実行するには、disownシェルから要求するか、systemdで実行します。残念ながら、私が毎日使用しているシステムの多くはsystemdにアップグレードされておらず、近いうちにアップグレードされる可能性が低いため、これはKillUserProcessesオプションではありません。

理想的には、コマンドラインスイッチを使用してtmuxを呼び出してバックグラウンドで実行されるのを防ぎ、エイリアスをtmux

どのSSHトンネルですか?

1つのOpenSSH接続は複数のセッションを提供します。

どのtmuxセッションですか?

SSHセッションごとに1つずつ別々のtmuxインスタンス。

どんな漏れ?

tmux インスタンスのリーク。例:SSH経由でマシンに接続します。同じ接続で別のシェルセッションを開始します。各SSHセッションでtmuxインスタンスを起動します。これで2つのtmuxインスタンスが作成されました。あるセッションでtmuxを停止し<C-d>た後(再度)、SSH接続を停止します<C-d>。他のSSHセッションは閉じられますが、そのセッションで実行されているtmuxインスタンスとすべての子プロセスが漏洩します。

説明してください:(1)現在どのような設定がありますか?

在庫OpenSSH、在庫tmux、いくつかのシェル。ほとんどリバースSSH接続 勝手に作り直すことはできませんが、関係ありません。

(2) 何を防止したいのか?

プロセスは他の tmux セッションでアクティブのままです。

これはSSHを介して接続された別のボックスなので、目的は、接続が終了した後に単一のtmuxインスタンスがアクティブに保たれるのを防ぐことです。そして分割ウィンドウと背景ウィンドウをたくさん使うので、子プロセスをぜひ集めてみたいです。

答え1

新しいセッションにsshログを記録するときにtmux attach -d || tmux new既存のtmuxセッションを追加したり、セッションがない場合は新しいセッションを作成するtmuxなどの方法を使用できます。これにより、接続が失われたときにtmuxセッションがsshバックグラウンドで実行されるのを防ぐことはできませんが、これらの破棄されたセッションが累積するのを防ぎます。

答え2

以下を使用すると、問題を完全に回避できると思います。モシュ

Moshは断続的な接続をサポートし、mosh-server接続が正しく切断されていない場合(たとえば、サーバーから切断された場合にクライアントを強制的に閉じるなど)にのみインスタンスが漏洩します。

関連情報