Застрявший процесс: действительно ли это - плохой знак?

Попробовать #!/bin/bash

Вторая вещь: find / -name bash
Третья вещь: ls -al /bin/bash

23
22.11.2012, 22:28
1 ответ

Это - не обязательно плохой знак, но позвольте мне ответить на Ваш последний вопрос сначала:

Что означает точно?

В 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 состояние.)

Это - часть нормального жизненного цикла процесса?

Да, это. То, что не нормально, - то, что процесс остается в этом состоянии в течение долгого времени. Это - плохой знак.

Почему этот процесс в особенности?

Трудный сказать. Это обычно вызывается узкими местами ввода-вывода с тяжелой активностью диска или ухудшенной возможностью соединения при использовании сетевых файловых систем (самый обычный сценарий, по моему опыту).

(Это - связанный вопрос в, Спрашивают Отличающийся: https://apple.stackexchange.com/questions/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity-m.)

38
27.01.2020, 19:41
  • 1
    Как я могу узнать, какие процессы точно застревают? –  mareoraft 29.12.2015, 17:59
  • 2
    @mareoraft В OS X, те с 'U' заявляют код в выводе ps axug или ps -eo user,pid,stat,args. В Linux те с 'D' заявляют код с тем же ps команды. Посмотрите объяснение ключевого слова состояния (OS X) или раздел PROCESS STATE CODES (Linux) в man ps для получения дополнительной информации. Или в OS X Вы могли работать top и ищите процессы, отмеченные как stuck в столбце STATE. положительная сторона –  jaume 06.01.2016, 09:24

Теги

Похожие вопросы