어느 프로세스에 PID 0이 있습니까?


답변:


51

wikipedia 페이지에서 : Process identifier :

특별히 구별되는 프로세스 ID에는 두 가지 작업이 있습니다. swapper 또는 sched 는 프로세스 ID 0을 가지며 페이징을 담당하며 실제로 일반 사용자 모드 프로세스가 아닌 커널의 일부입니다 . 프로세스 ID 1은 일반적으로 시스템 시작 및 종료를 주로 담당 하는 init 프로세스입니다. 원래 프로세스 ID 1은 기술적 조치에 의해 init 용으로 특별히 예약되지 않았습니다.이 ID는 커널이 처음으로 호출 한 프로세스의 자연스러운 결과로 나타납니다. 보다 최근의 유닉스 시스템에는 일반적으로 '프로세스'로 보이는 추가 커널 구성 요소가 있으며,이 경우 PID 1은 이전 시스템과의 일관성을 유지하기 위해 init 프로세스에 적극적으로 예약됩니다.

당신이 부모의 PID (PPID)를 보면 당신이 증거를 볼 수 initkthreadd:

$ ps -eaf
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jun24 ?        00:00:02 /sbin/init
root         2     0  0 Jun24 ?        00:00:00 [kthreadd]

kthreadd커널 스레드 데몬입니다. 모든 kthread는이 스레드에서 분기됩니다. psPPID가 누구인지 사용 하고 확인한 다른 프로세스를 보면 다음과 같은 증거를 볼 수 있습니다 .

$ ps -eaf
root         3     2  0 Jun24 ?        00:00:57 [ksoftirqd/0]
root         4     2  0 Jun24 ?        00:01:19 [migration/0]
root         5     2  0 Jun24 ?        00:00:00 [watchdog/0]
root        15     2  0 Jun24 ?        00:01:28 [events/0]
root        19     2  0 Jun24 ?        00:00:00 [cpuset]
root        20     2  0 Jun24 ?        00:00:00 [khelper]

그들은 모두 2입니다.


PID 0이 swapper라면 kswapd[0-9]*현재 시스템의 PID 52가 무엇입니까? 페이징에 대한 책임도있는 것 같습니다.
Ruslan

1
@Ruslan-질문을 따르는 경우 기본 사이트에 문의하십시오. 새 질문에서이 질문을 참조하십시오.
slm

글쎄, 그러나 우리가 포크 자식 프로세스를 사용하여 새로운 프로세스를 만들 때 pid 0 ?
roottraveller

부모 루트 PID가 포크가 발생한 곳이 무엇이든 @roottraveller가 반드시 필요한 것은 아닙니다.
slm

10

에서 프로세스 식별자 위키 :

특별히 구별되는 프로세스 ID에는 두 가지 작업이 있습니다. swapper 또는 sched는 프로세스 ID 0을 가지며 페이징을 담당하며 실제로 일반 사용자 모드 프로세스가 아닌 커널의 일부입니다.


5

그 과정 pid 0은 스케줄러입니다.

프로세스 ID 설명 :
0 스케줄러
1 초기화 프로세스
2 kflushd
3 kupdate
4 kpiod
5 kswapd
6 mdrecoveryd

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.