Es ist nicht unbedingt ein schlechtes Zeichen, aber lassen Sie mich zuerst Ihre letzte Frage beantworten:
Was bedeutet es genau?
Im top
Quellcode (von http://www.opensource.apple.com/release/mac-os-x-1082/ ) wird der feststeckende Status als Identifier LIBTOP_STATE_STUCK
(von libtop.c
) bezeichnet:
libtop_state_str(uint32_t state)
{
const char *strings[] = {
"zombie",
#define LIBTOP_STATE_ZOMBIE 0
"running",
#define LIBTOP_STATE_RUN 1
"stuck",
#define LIBTOP_STATE_STUCK 2
"sleeping",
#define LIBTOP_STATE_SLEEP 3
"idle",
#define LIBTOP_STATE_IDLE 4
"stopped",
#define LIBTOP_STATE_STOP 5
"halted",
#define LIBTOP_STATE_HALT 6
"unknown"
#define LIBTOP_STATE_UNKNOWN 7
};
(...)
}
Wird später in derselben Datei LIBTOP_STATE_STUCK
dem Kernelstatus zugeordnet TH_STATE_UNINTERRUPTIBLE
:
/* Translate a mach state to a state in the state breakdown array. */
static int
libtop_p_mach_state_order(int state, long sleeptime)
{
switch (state) {
case TH_STATE_RUNNING:
return LIBTOP_STATE_RUN;
case TH_STATE_UNINTERRUPTIBLE:
return LIBTOP_STATE_STUCK;
(...)
}
Ein Prozess im blockierten Zustand bedeutet also, dass sich der Prozess / Thread in einem unterbrechungsfreien Wartezustand befindet, wie TH_STATE_UNINTERRUPTIBLE
in der Kernelstruktur definiert thread_basic_info
(siehe http://web.mit.edu/darwin/src/modules/xnu/osfmk/). man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
wo run_state
ist
run_state: Der Ausführungsstatus des Threads. Mögliche Werte sind:
(...)
- TH_STATE_UNINTERRUPTIBLE: Der Thread befindet sich in einem nicht unterbrechbaren Wartezustand.
(...)
Dies wird normalerweise durch einen Prozess verursacht, der auf E / A wartet, dh, der Prozess hat das Lesen oder Schreiben auf / von der Festplatte oder dem Netzwerk angefordert und wartet auf die Rückkehr des Systemaufrufs (siehe http://en.wikipedia.org) / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep oder http://www.novell.com/support/kb/doc.php?id=7002725 ( weitere Informationen).
(Wenn BSD-Optionen nicht verwendet werden, wie dies normalerweise unter Linux der Fall ist, ps
wird der unterbrechungsfreie Ruhezustand als D- Status angezeigt .)
Gehört es zum normalen Lebenszyklus eines Prozesses?
Ja ist es. Was nicht normal ist, ist, dass ein Prozess für eine lange Zeit in diesem Zustand bleibt . Das ist ein schlechtes Zeichen.
Warum gerade dieser Prozess?
Schwer zu sagen. Dies wird normalerweise durch E / A-Engpässe mit hoher Festplattenaktivität oder eingeschränkter Konnektivität bei der Verwendung von Netzwerkdateisystemen verursacht (das nach meiner Erfahrung üblichste Szenario).
(Dies ist eine verwandte Frage in Ask Different: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)
ps axug
oderps -eo user,pid,stat,args
. Unter Linux diejenigen mit einem D-Statuscode mit denselbenps
Befehlen.man ps
Weitere Informationen finden Sie in der Erläuterung des Schlüsselworts state (OS X) oder im Abschnitt PROCESS STATE CODES (Linux) unter . In OS X können Sie auchtop
nach Prozessen suchen, diestuck
in der Spalte STATE markiert sind .