
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
たままになる接続は、アクティブな接続がまだないときにこの特定のサーバーに対して最初に確立した接続です。