프로세스 중단: 이는 나쁜 징조인가요?

프로세스 중단: 이는 나쁜 징조인가요?

때때로 일부 프로세스가 중단되는 경우가 있습니다. 예를 들어:

PID    COMMAND          %CPU TIME     #TH  #WQ  #POR #MREGS RPRVT  RSHRD  RSIZE  VPRVT  VSIZE  PGRP  PPID  STATE
99357  plugin-container 0.1  12:07.07 10   1    224  2097   40M    84M    66M    82M    2757M  91688 99346 sleeping
99346  firefox          0.4  48:54.20 29   1    265  16250  467M   172M   799M   538M   4210M  91688 1     sleeping 
88029- Aquamacs       1.2  31:24.12 4    3    126  268    19M    49M    32M    36M    777M   88029 152   stuck

프로세스의 정상적인 수명주기의 일부입니까? 이 과정이 왜 특별한가요?

무슨 뜻이에요?

답변1

이것이 반드시 나쁜 징조는 아니지만 먼저 마지막 질문에 답해 드리겠습니다.

무슨 뜻이에요?

top소스 코드 에서 (fromhttp://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: 스레드가 중단할 수 없는 대기 상태에 있습니다.

(...)

이는 일반적으로 I/O를 기다리는 프로세스로 인해 발생합니다. 즉, 프로세스가 디스크나 네트워크에서 읽기 또는 쓰기를 요청하고 시스템 호출이 반환되기를 기다리고 있습니다(참조:http://en.wikipedia.org/wiki/Sleep_%28operating_system%29#Uninterruptible_sleep또는http://www.novell.com/support/kb/doc.php?id=7002725더 많은 정보를 알고 싶다면).

(일반적으로 Linux의 경우처럼 BSD 옵션을 사용하지 않으면 ps논스톱 절전 모드가 다음과 같이 표시됩니다.상태. )

프로세스의 정상적인 수명주기의 일부입니까?

예. 비정상적인 것은 과정이다머무르다오랫동안 이 상태를 유지하세요.그건이것은 나쁜 징조입니다.

특히 이 과정에 대해 이야기해야 하는 이유는 무엇입니까?

말하기 어렵다. 이는 일반적으로 네트워크 파일 시스템을 사용할 때 과도한 디스크 활동 또는 느린 연결 성능으로 인한 I/O 병목 현상으로 인해 발생합니다(내 경험상 가장 일반적인 시나리오입니다).

(다음은 Ask Different의 관련 질문입니다.https://apple.stackexchange.com/questions/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity-m.)

관련 정보