Debuggen des hängenden Bash-Prozesses


7

Nach einigen schlechten Leistungen heute habe ich überprüft top:

 1  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  14229 myuser    20   0  8776 5264 1684 R   99  0.2   1383:47 bash

98-100% Nutzung durch einen Bash-Prozess, der vor langer Zeit hätte sterben sollen (ich habe gerade alle Terminals geschlossen, um dies zu überprüfen)? Ich bin mir nicht sicher, was es verursacht.

$ lsof -p 14229
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    14229 myuser  cwd    DIR   0,23     4096 11059271 /home/users/myuser (company.com:/home/users/)
bash    14229 myuser  rtd    DIR    8,2     4096        2 /
bash    14229 myuser  txt    REG    8,2   920788  7617113 /bin/bash
bash    14229 myuser  mem    REG    8,2    30520   657679 /lib/i386-linux-gnu/libnss_compat-2.15.so
bash    14229 myuser  mem    REG    8,2    13940   657672 /lib/i386-linux-gnu/libdl-2.15.so
bash    14229 myuser  mem    REG    8,2  1713640   657666 /lib/i386-linux-gnu/libc-2.15.so
bash    14229 myuser  mem    REG    8,2   121024   660635 /lib/i386-linux-gnu/libtinfo.so.5.9
bash    14229 myuser  mem    REG    8,2    47040   657683 /lib/i386-linux-gnu/libnss_files-2.15.so
bash    14229 myuser  mem    REG    8,2    42652   657690 /lib/i386-linux-gnu/libnss_nis-2.15.so
bash    14229 myuser  mem    REG    8,2   134344   657659 /lib/i386-linux-gnu/ld-2.15.so
bash    14229 myuser  mem    REG    8,2    92016   657678 /lib/i386-linux-gnu/libnsl-2.15.so
bash    14229 myuser  mem    REG    8,2  2919792  7748495 /usr/lib/locale/locale-archive
bash    14229 myuser  mem    REG    8,2    26256  7757442 /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache
bash    14229 myuser    0r   CHR  136,1      0t0        4 /dev/pts/1 (deleted)
bash    14229 myuser    1w   CHR  136,1      0t0        4 /dev/pts/1 (deleted)
bash    14229 myuser    2w   CHR  136,1      0t0        4 /dev/pts/1 (deleted)
bash    14229 myuser  255u   CHR  136,1      0t0        4 /dev/pts/1 (deleted)

Mit Ausnahme der /dev/ptsZeilen ist dies identisch mit anderen Bash-Prozessen:

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    6674 myuser  cwd    DIR   0,23     4096 11059271 /home/users/myuser (company.com:/home/users/)
bash    6674 myuser  rtd    DIR    8,2     4096        2 /
bash    6674 myuser  txt    REG    8,2   920788  7617113 /bin/bash
bash    6674 myuser  mem    REG    8,2  1713640   657666 /lib/i386-linux-gnu/libc-2.15.so
bash    6674 myuser  mem    REG    8,2   121024   660635 /lib/i386-linux-gnu/libtinfo.so.5.9
bash    6674 myuser  mem    REG    8,2    47040   657683 /lib/i386-linux-gnu/libnss_files-2.15.so
bash    6674 myuser  mem    REG    8,2    13940   657672 /lib/i386-linux-gnu/libdl-2.15.so
bash    6674 myuser  mem    REG    8,2    30520   657679 /lib/i386-linux-gnu/libnss_compat-2.15.so
bash    6674 myuser  mem    REG    8,2    42652   657690 /lib/i386-linux-gnu/libnss_nis-2.15.so
bash    6674 myuser  mem    REG    8,2    92016   657678 /lib/i386-linux-gnu/libnsl-2.15.so
bash    6674 myuser  mem    REG    8,2   134344   657659 /lib/i386-linux-gnu/ld-2.15.so
bash    6674 myuser  mem    REG    8,2  2919792  7748495 /usr/lib/locale/locale-archive
bash    6674 myuser  mem    REG    8,2    26256  7757442 /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache
bash    6674 myuser    0r   CHR  136,2      0t0        5 /dev/pts/2
bash    6674 myuser    1w   CHR  136,2      0t0        5 /dev/pts/2
bash    6674 myuser    2w   CHR  136,2      0t0        5 /dev/pts/2
bash    6674 myuser  255u   CHR  136,2      0t0        5 /dev/pts/2

Standard killfunktioniert nicht:

$ kill 14229 && sleep 1m && kill -0 14229 && echo Alive
Alive

Demnach ps wafuxhat es keine untergeordneten Prozesse.

Versucht, es wie von @ChandraRavoori empfohlen zu verfolgen:

$ sudo strace -p 14229
Process 14229 attached - interrupt to quit

Danach bekomme ich keine Ausgabe mehr. Ich habe es kill 14229mehrmals versucht und es wurde jedes Mal nur Folgendes gedruckt:

--- SIGTERM (Terminated) @ 0 (0) ---

Was sind andere Dinge zu überprüfen , bevorkill -9 ?


2
Wie wäre es mit Strace auf der Pid?
iruvar

Guter Vorschlag @ChandraRavoori; hat die Frage aktualisiert.
10b0

3
Sie können versuchen, gdb daran anzuhängen, wenn Sie debuggen möchten. Ansonsten töte es einfach.
Derobert

3
/home/users/myuserEs sieht so aus, als ob es sich um ein NFS-Mount handelt, daher steckt der Bash-Prozess wahrscheinlich mit einem veralteten NFS-Handle für das CWD fest. War Ihr NFS-Server für eine Weile nicht erreichbar?
Cas

Da strace keine Ausgabe erzeugt, würde ich erwarten, dass der Prozess in einem Systemaufruf blockiert wird. Zusammen mit der Beobachtung von @CraigSanders würde ich auch denken, dass dies ein nfs-bezogenes Problem ist.
Wunder173

Antworten:



0

Sie wissen nicht, ob Sie es bereits versucht haben, aber
ps xales kann Ihnen die übergeordnete Prozess-ID geben.

Sie können den Elternteil töten, um sich davon zu erholen.

PS: Normalerweise hat bash den Init-Prozess als übergeordnetes Element. Wenn dies auch hier der Fall ist, kann dies nur mit der Standardlösung Strg + Alt + Entf (oder Neustart) behoben werden.


6
Huh, ich wusste nicht, dass Linux-Administratoren erwägen, die Standardlösung neu zu starten ...
Thihara

Das Töten des kleinsten gemeinsamen Nenners ist eine Notfallmaßnahme, wenn der Rest des Systems eine höhere Priorität hat und gefährdet ist, jedoch nichts mit dem Debuggen zu tun hat. Auf der anderen Seite ist es ein guter Anfang, die Eltern aufzuspüren und die Nachkommen zu erkunden, wie auch immer Sie dies tun. Ein Wort zu den Weisen: Client-Server-Paare sind weit verbreitet und allgemeine Kommunikation zwischen Prozessen, sodass der Prozessbaum Sie nur so weit bringt. (Es ist schwer, sich eine nützliche, streng gerichtete azyklische Umgebung vorzustellen, nicht wahr?)
John P

1
Für Sie und / oder zukünftige Leser ist hier ein sehr informatives Dokument zur Linux- Hangerkennung : pdfs.semanticscholar.org/6fcb/… - überfliegen Sie einfach die ersten Seiten nach Konzepten / Schlüsselwörtern. Es behandelt die Art und Weise, wie die Dinge derzeit funktionieren (nun, geben oder nehmen Sie 8 Jahre) und Fehler / Versehen / Fallstricke.
John P
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.