sshセッションを強制終了した後でもリモートプロセスが実行されるのはなぜですか?


15

ローカルシェルでこのコマンドを実行して、リモートログファイルを作成しています:

ssh remotemachine tail -100f /path/to/error_file

このコマンドからctrl-cを実行すると、ctrl-cがローカルsshプロセスを強制終了し、リモートマシンでテールが実行されたままになるようです。接続を切断するとハングアップ信号が送信され(nohupを使用していないため)、プロセスを強制終了するという印象を受けましたが、明らかにそうではありません。

ハングアップ信号が送信されるときと送信されないときに、誰かがさらに光を当てることができますか?リモートマシンはUbuntuで、どちらかが違いを生む場合、ローカルシェルはOS X bashです。

回答:


13

この動作は、実行中のプロセス用の制御端末がないために発生します。リモートプロセスに制御端末がない場合、セッションを処理するリモートsshプロセスはコマンドを強制終了できません。コマンドはゾンビ状態でハングし、最終的にinitによってクリーンアップされます。

これを回避するには、制御端末を提供する-tオプションを指定して実行します。これにより、sshコマンドをリモートでctrl-cすると、プロセスが終了します。

-tオプション:

擬似tty割り当てを強制します。これは、リモートマシン上で任意の画面ベースのプログラムを実行するために使用できます。これは、たとえばメニューサービスを実装する場合に非常に便利です。複数の-tオプションは、sshにローカルttyがない場合でも、ttyの割り当てを強制します。

このオプションを使用する場合は、制御端末を使用すること(エスケープ文字を送信する機能など)の他の意味があるため、man sshおよびman sshdをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.