작업 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
할 수 있습니다 .top
I
/proc
/proc
다음을 통해 상태를 확인할 수 있습니다 /proc/<PID>/stat
.
$ cat /proc/10/stat
10 (lru-add-drain) S 2 0 0 0 -1 69247072 ....
^--- state = S = Sleep