web-dev-qa-db-ja.com

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:

$ 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
4
Ivan Denisovich

何も悪いことはないようです。あなたが見ているプロセス(ssh)は、プロセス統計を取得している時点では何の関係もありません。

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

1
gerhard d.

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