Это не обязательно плохой знак, но позвольте мне сначала ответить на ваш последний вопрос:
Что это значит именно?
В top
исходном коде (из http://www.opensource.apple.com/release/mac-os-x-1082/ ) застрявшее состояние называется идентификатором LIBTOP_STATE_STUCK
(из libtop.c
):
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
};
(...)
}
Позже в этом же файле LIBTOP_STATE_STUCK
отображается состояние ядра 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;
(...)
}
Таким образом, процесс в застрявшем состоянии означает, что процесс / поток находится в состоянии непрерывного ожидания , которое TH_STATE_UNINTERRUPTIBLE
определено в структуре ядра thread_basic_info
(см. Http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
где run_state
находится:
run_state: состояние выполнения потока. Возможные значения:
(...)
- TH_STATE_UNINTERRUPTIBLE: Поток находится в непрерывном состоянии ожидания.
(...)
Это обычно вызывается процессом, ожидающим ввода-вывода, то есть процесс запросил чтение или запись на диск или с диска или в сеть и ожидает возврата системного вызова (см. Http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep или http://www.novell.com/support/kb/doc.php?id=7002725 для получения дополнительной информации).
(Когда параметры BSD не используются, как это обычно бывает в Linux, ps
в режиме D отображается непрерывный сон ).
Является ли это частью нормального жизненного цикла процесса?
Да, это. Что не является нормальным, так это то, что процесс остается в этом состоянии в течение длительного времени. Это плохой знак.
Почему именно этот процесс?
Сложно сказать. Обычно это вызвано узкими местами ввода / вывода с высокой активностью диска или ухудшением соединения при использовании сетевых файловых систем (самый обычный сценарий, по моему опыту).
(Это связанный вопрос в разделе Спросите: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- м .)
ps axug
илиps -eo user,pid,stat,args
. В Linux те с кодом состояния 'D' с теми жеps
командами. Посмотрите объяснение ключевого слова состояния (OS X) или раздела КОДОВ СОСТОЯНИЯ ПРОЦЕССА (Linux) вman ps
для получения дополнительной информации. Или в OS X вы можете запускатьtop
и искать процессы, отмеченные какstuck
в столбце STATE.