Wie ursprüngliche Befehlszeile eines Zombie-Prozesses ermitteln

  • Liebe QNAP-Gemeinde,


    wie in einem anderen Thread beschrieben, kämpfe ich seit einiger Zeit mit einem Bug in HBS3, der sich so auswirkt, dass das Programm mit einem Kindprozess im Zustand Z (Zombie) hängenbleibt.

    Da ich ganz gerne wieder eine funktionierende Datensicherung hätte und von Linux nicht ganz unbeleckt bin, möchte ich parallel zu den (Nicht-)Bemühungen des QNAP-Supports selbst weiterforschen, was da schiefgeht.

    Dabei würde mich aktuell interessieren, was die Aufgabe dieses Zombie-Prozesses ist.


    In der Ausgabe von ps steht nur [sh], d.h. es war ein Shell-Skript, was da ausgeführt wurde.

    Welches Skript das war und mit welchen Argumenten es aufgerufen wurde, ist dem Systemkern zu diesem Zeitpunkt nicht mehr bekannt und kann somit von ps auch nicht mehr angezeigt werden.

    Hat jemand eine Idee, wie ich das herausbekommen könnte?

    Gibt es in QTS so etwas wie auditd? Oder kann man der QTS-Shell irgendwie beibringen, beim Start ihre PID und Kommandozeile zu loggen?

    Klar gibt das eine Menge Daten, aber meine Plattenkapazität ist (noch) ganz komfortabel bemessen.


    Danke für alle Tipps,

    Tilman

  • Moin,


    ich habe dafür mal das Tool Forkstat (https://github.com/ColinIanKing/forkstat) verwendet, das zeigt jeden einzelnen fork, exec, clone und exit syscall an.

    Wenn du den Output mit grep etwas eindampfst könnte das die gewünschte cmdline liefern.


    Installation ging relativ easy, hab vorher die Toolchain mit diesem Entware installiert (https://github.com/Entware/Entware/wiki/Install-on-QNAP-NAS)

    Code
    opkg install gcc make busybox ldd make gawk sed patch diffutils coreutils-install

    Mangels vernünftigem git nur den snapshot geladen und kompiliert

    Code
    wget https://github.com/ColinIanKing/forkstat/archive/master.zip
    unzip master.zip
    cd forkstat-master/
    CC=gcc make

    Der Output ist dann

    Code
    # ./forkstat |grep "exec"|grep "speaker"
    12:46:01 exec  13924                 sh -c /usr/local/sbin/speaker.sh getvol 2>/dev/null
    12:46:01 exec  13925                 /bin/sh /usr/local/sbin/speaker.sh getvol
    12:46:03 exec  14069                 sh -c /usr/local/sbin/speaker.sh getvol 2>/dev/null
    12:46:04 exec  14071                 /bin/sh /usr/local/sbin/speaker.sh getvol

    Hoffe das hilft dir weiter.