ssh プロセスがハングしている理由を調べるにはどうすればよいでしょうか?

ssh プロセスがハングしている理由を調べるにはどうすればよいでしょうか?

SSH 経由でコマンドを実行するとiostat -dkx 2 2、期待どおりの結果が得られますが、ローカル コンピューター上のプロセスは「割り込み可能なスリープ」の状態で稼働中であると表示されます。なぜこのようなことが起こるのでしょうか。この動作の理由を調べる方法はありますか。

完全なコマンド:

$ ssh -o ConnectTimeout=4 -o ChallengeResponseAuthentication=no -o PasswordAuthentication=no <user>@host> iostat -dkx 2 2

ps出力:

$ ps aux | grep 11893 && ps aux | grep PID
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
1000       10273  0.0  0.0 103280   904 pts/0    S+   12:09   0:00 grep PID
1000       11893  0.0  0.0 158732  3892 ?        S    Feb17   0:00 ssh -o ConnectTimeout=4 -o ChallengeResponseAuthentication=no -o PasswordAuthentication=no <user>@<host> iostat -dkx 2 2
1000       10285  0.0  0.0 103280   904 pts/0    S+   12:09   0:00 grep 11893

ストレース:

$ strace -p 11893
Process 11893 attached - interrupt to quit
select(8, [5], [], NULL, NULL^C <unfinished ...>

wchan:

$ cat /proc/11893/wchan 
poll_schedule_timeout

スタックトレース:

$ cat /proc/11893/stack 
[] poll_schedule_timeout+0x39/0x60
[] do_select+0x6bb/0x7c0
[] core_sys_select+0x18a/0x2c0
[] sys_select+0x47/0x110
[] system_call_fastpath+0x16/0x1b
[] 0xffffffffffffffff

答え1

何も問題はないようです。あなたが見ているプロセス (ssh) は、そのプロセス統計を取得している時点では、単に何もしていません。

リモートで開始されたコマンドからの出力がない限り、「select」はブロックされ、プロセスはスリープ状態になります。

答え2

ControlMaster構成に ( ) が含まれていますか~/.ssh/config? 含まれている場合、sshそれが別の接続のマスター接続である場合、プロセスは終了できません。これが問題である場合、 の実行とは関係ありません。開いiostatたままになる接続は、アクティブな接続がまだないときにこの特定のサーバーに対して最初に確立した接続です。

関連情報