ps 명령에서 인식할 수 없는 프로세스 상태 출력

ps 명령에서 인식할 수 없는 프로세스 상태 출력

작업 ps aux중에 일부 프로세스에 다음 과 같은 Ubuntu 18.04상태가 있는 것을 확인했습니다 .I

root         1  0.0  0.0 225520  9144 ?        Ss   10:36   0:02 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    10:36   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<   10:36   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        I<   10:36   0:00 [mm_percpu_wq]

그러나 맨페이지에는 이 상태가 언급되어 있지 않습니다 ps.

프로세스 상태 코드 다음은 s, stat 및 상태 출력 지정자(제목 "STAT" 또는 "S")가 프로세스 상태를 설명하기 위해 표시하는 다양한 값입니다.

           D    uninterruptible sleep (usually IO)
           R    running or runnable (on run queue)
           S    interruptible sleep (waiting for an event to complete)
           T    stopped by job control signal
           t    stopped by debugger during the tracing
           W    paging (not valid since the 2.6.xx kernel)
           X    dead (should never be seen)
           Z    defunct ("zombie") process, terminated but not reaped by its parent

   For BSD formats and when the stat keyword is used, additional characters may be displayed:

           <    high-priority (not nice to other users)
           N    low-priority (nice to other users)
           L    has pages locked into memory (for real-time and custom IO)
           s    is a session leader
           l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
           +    is in the foreground process group

I상태는 무엇입니까?

답변1

"게으르다"라는 뜻

    /* states beyond TASK_REPORT: */
    "I (idle)",             /* 0x80 */
인용하다:상단 출력의 Linux 프로세스 상태 "I"는 무엇을 의미합니까?

커널 소스 코드를 더 자세히 살펴보면 TASK_REPORT_IDLE프로세스가 TASK_IDLE 상태에 있을 때 커널(함수) 내부에서 반환하도록 문서화되어 있다는 것을 발견했습니다 __get_task_state.

#define TASK_IDLE   (TASK_UNINTERRUPTIBLE | TASK_NOLOAD)

다음 커널에 대한 커밋도 참조하세요.일정/대기: TASK_NOLOAD 및 TASK_IDLE 도입.

현재 사람들은 평균 부하가 증가하기 때문에 TASK_INTERRUPTIBLE유휴 상태 kthreads로 "일"을 기다리는 데 익숙합니다 . TASK_UNINTERRUPTIBLE모든 유휴 상태가 kthreads로드 평균에 기여하도록 하는 것은 약간 어리석은 일입니다.

kthreads이제 모든 신호가 차단되었기 때문에 대부분 잘 작동합니다 . 그러나 loadavg 문제 외에도 문제를 일으킬 수 있으므로 TASK_UNINTERRUPTIBLE대신 사용해야 하는 일부 사이트가 있습니다.

이 패치는 loadavg 계정 방지 TASK_NOLOAD와 함께 사용할 수 있는 기능을 추가합니다.TASK_UNINTERRUPTIBLE

대부분의 가상 사용 사이트는 스레드가 유휴 상태에서 작업을 기다리는 루프이므로 TASK_IDLE도우미가 도입되었습니다.

노트:이거 추가된거 같은데4.14-rc3의 Linux 커널:

sched/debug: 명시적인 TASK_IDLE 인쇄 추가

/프로세스

이것이 Linux 커널에서 나온다는 점을 고려하면 다운스트림 도구(예: 및 )는 정보를 얻기 때문에 명시적으로 알려주지 않고도 이 새로운 상태를 즉시 표시 ps할 수 있습니다 .topI/proc

/proc다음을 통해 상태를 확인할 수 있습니다 /proc/<PID>/stat.

$ cat /proc/10/stat
10 (lru-add-drain) S 2 0 0 0 -1 69247072 ....
                   ^--- state = S = Sleep

인용하다

관련 정보