
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 ControlMaster
in Ihrer Konfiguration ~/.ssh/config
zufällig ()? Wenn ja, ssh
kann 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. iostat
Die Verbindung, die offen bleibt, ist die erste, die Sie zu diesem bestimmten Server herstellen, während noch keine Verbindung aktiv ist.