Der Wchan-Abschnitt in der PS-Ausgabe zeigt nichts an

Der Wchan-Abschnitt in der PS-Ausgabe zeigt nichts an

Ich weiß, dass ein Prozess, wenn er in diesen DZustand wechselt, sich in einem nicht unterbrechbaren Zustand befindet. Der Prozess kann nicht durch ein Signal beendet werden. Er verlässt diesen Zustand nur bei einem Neustart oder wenn die E/A-Wartezeit abgelaufen ist.

Ich habe viele Prozesse in Deinem Zustand, der anzeigt, dass mit meiner Maschine etwas nicht stimmt. Auch nach einem Neustart kehren sie in den DZustand zurück. Ich habe online gesucht und diesen wchanAbschnitt in der PS-Ausgabe gefunden, der angibt, auf welche Sache im Kernel mein Prozess wartet.

Wenn ich diesen Befehl verwende, ps axl| grep Dgelange ich -in die Wchan-Spalte und es gibt online keine Erklärung, was das bedeutet.

Dies ist meine Beispielausgabe für den obigen Befehl.

0     0  69970      1  20   0  25064  1088 -      D    ?          0:00 ls -l

Ich kann nicht verstehen, was -die obige Ausgabe bedeutet.

Antwort1

Es gibt mehrere mögliche Gründe dafür, dass wchan als gemeldet wurde -von ps:

  • der Prozess ist im Kernel nicht blockiert, d. h. er läuft (vgl. die stateSpalte „ps“)
  • DieStack-Walking-Verfahrenschlägt aufgrund eines Sonderfalls oder einer Race Condition fehl. Es kann sogar bedingungslos fehlschlagen, z. B. bei Kerneln, die korrekte Frame-Pointer-Einstellungen erfordern, aber ohne diese kompiliert wurden - überprüfen Sie dies mit cat /proc/*/wchan- alle 0-Ausgaben weisen auf eine defekte Wchan-Unterstützung hin (z. B. derzeit der Fall beiFedora 31 und 32)
  • Duhabe nichtdas NötigeBerechtigungen für den Ptrace-Zugriffsmodus(nämlich PTRACE_MODE_READ_FSCREDS) - unwahrscheinlich
  • DieSymbolsuche schlägt fehlim Kernel - unwahrscheinlich

Beachten Sie, dass die aktuelle psVersion die Wchan-Informationen liest, auf die Sie zum einfacheren Testen auch /proc/$pid/wchandirekt zugreifen können . Diese Datei liest , wenn der Abruf der Wchan-Informationen fehlgeschlagen ist, was sich in übersetzt .cat0ps-

Auf Systemen wo wchanes defekt ist, gibt es einen Ersatz (erfordert Root):

cat /proc/$pid/stack

Oder konsultieren Sie alternativ (erfordert keine Root-Rechte):

cat /proc/$pid/syscall

Antwort2

im neueren Linux-Kernel sehen Sie, in welcher Kernelfunktion Ihr Prozess festhängt

cat /proc/<pid_numer>/stack

Antwort3

Die Manpage für PS enthält diese Information: „-“ bedeutet, dass der Prozess ausgeführt wird. WCHAN-Name der Kernelfunktion, in der der Prozess ruht, ein „-“, wenn der Prozess ausgeführt wird, oder ein „*“, wenn der Prozess mehrere Threads umfasst und PS keine Threads anzeigt.

verwandte Informationen