Wie finden Sie heraus, warum SSH-Prozesse hängen bleiben?

Wie finden Sie heraus, warum SSH-Prozesse hängen bleiben?

Wenn ich einen Befehl beispielsweise über SSH ausführe iostat -dkx 2 2, erhalte ich das erwartete Ergebnis, aber die Prozesse auf dem lokalen Computer werden im Status „unterbrechbarer Ruhezustand“ als aktiv angezeigt. Warum passiert das? Gibt es eine Möglichkeit, den Grund für dieses Verhalten herauszufinden?

vollständiger Befehl:

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

ps-Ausgabe:

$ 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

Stapelüberwachung:

$ 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

Antwort1

Es scheint, als ob alles in Ordnung ist. Der Prozess, den Sie betrachten (ssh), hat in dem Moment, in dem Sie seinen Prozessstatus erfassen, einfach nichts zu tun.

Solange keine Ausgabe vom remote gestarteten Befehl erfolgt, blockiert „select“ und der Prozess wird in den Ruhezustand geschickt.

Antwort2

Haben Sie ControlMasterin Ihrer Konfiguration ~/.ssh/configzufällig ()? Wenn ja, sshkann der Prozess nicht beendet werden, wenn es sich um die Hauptverbindung für eine andere Verbindung handelt. Wenn das das Problem ist, hat es nichts mit dem Ausführen von zu tun. iostatDie Verbindung, die offen bleibt, ist die erste, die Sie zu diesem bestimmten Server herstellen, während noch keine Verbindung aktiv ist.

verwandte Informationen