# PID 0란 무엇인가?

> Clean Markdown view of GeekNews topic #15239. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15239](https://news.hada.io/topic?id=15239)
- GeekNews Markdown: [https://news.hada.io/topic/15239.md](https://news.hada.io/topic/15239.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-06-08T23:34:20+09:00
- Updated: 2024-06-08T23:34:20+09:00
- Original source: [blog.dave.tf](https://blog.dave.tf/post/linux-pid0/)
- Points: 17
- Comments: 3

## Summary

PID 0에 대한 잘못된 정보가 웹에 널리 퍼져 있어, 정확한 이해가 필요합니다. PID 0은 커널 초기화와 CPU 코어 관리에 중요한 역할을 하며, 특히 다중 코어 시스템에서 각 코어마다 idle 스레드로 작동합니다. 이 기사는 PID 0의 실제 역할과 역사, 그리고 잘못된 정보의 문제점을 명확히 설명하여 소프트웨어 엔지니어와 시스템 최적화에 관심 있는 사람들에게 큰 도움이 됩니다.

## Topic Body

- PID 0에 대해 웹에서 검색하면 대부분 잘못된 정보가 나옴.  
- Google, Bing, DuckDuckGo, Kagi에서 PID 0을 검색했을 때, 정확한 답변을 찾기 어려웠음.  
- Wikipedia의 잘못된 정보가 16년 동안 퍼져나가면서 많은 사이트들이 이를 인용함.  
  
#### PID 0의 역사  
  
- PID 0은 스케줄링과 전원 관리에 관여하며, 페이징과는 관련이 없음.  
- PID 0은 CPU 코어가 할 일이 없을 때 실행되는 스케줄러 역할을 함.  
- 초기 Unix에서는 PID 0이 메모리 관리와 관련된 작업을 했으나, 현대 Unix에서는 그렇지 않음.  
  
#### PID 0의 실제 역할  
  
- PID 0은 커널을 시작하고, 이후에는 CPU 코어를 관리하는 역할을 함.  
- Linux 커널에서 PID 0은 `do_idle` 함수로 구현되어 있음.  
- FreeBSD와 같은 다른 커널에서도 비슷한 역할을 수행함.  
  
#### PID 0의 혼란  
  
- Linux 커널과 사용자 공간에서 PID의 의미가 다름.  
- 커널에서는 `task_struct`가 하나의 스레드를 나타내며, PID는 스레드 ID를 의미함.  
- 사용자 공간에서는 PID가 프로세스를 나타내며, 이는 스레드 그룹 ID와 동일함.  
  
#### 다중 코어 시스템에서의 PID 0  
  
- 다중 코어 시스템에서는 각 CPU 코어마다 하나의 idle 스레드가 있음.  
- 이 idle 스레드들은 모두 스레드 그룹 0에 속함.  
- 사용자 공간에서는 이를 PID 0으로 인식함.  
  
#### 결론  
  
- PID 0은 존재하며, 커널을 시작하는 스레드임.  
- PID 0은 초기 커널 초기화 작업을 수행하고, 이후에는 idle 스레드로 전환됨.  
- PID 0은 메모리 관리와는 관련이 없음.  
- 다중 코어 시스템에서는 각 코어마다 idle 스레드가 있으며, 이들은 모두 스레드 그룹 0에 속함.  
  
### GN⁺의 의견  
  
- **정확한 정보의 중요성**: 잘못된 정보가 오랜 시간 동안 퍼져나가면서 많은 사람들이 이를 사실로 받아들이게 됨. 정확한 정보 제공의 중요성을 다시 한번 상기시켜줌.  
- **커널의 복잡성**: 커널의 초기화 과정과 스케줄링 메커니즘은 매우 복잡하며, 이를 이해하는 것은 소프트웨어 엔지니어에게 큰 도움이 됨.  
- **PID의 혼란**: 커널과 사용자 공간에서 PID의 의미가 다르기 때문에, 이를 명확히 이해하는 것이 중요함.  
- **다중 코어 시스템**: 현대의 다중 코어 시스템에서 PID 0의 역할을 이해하는 것은 시스템 성능 최적화에 도움이 됨.  
- **Wikipedia의 영향력**: Wikipedia의 정보가 얼마나 많은 웹사이트에 영향을 미치는지 보여줌. 정확한 정보 업데이트의 중요성을 강조함.

## Comments



### Comment 27329

- Author: thinkpad
- Created: 2024-07-17T11:44:03+09:00
- Points: 1

그 agent 가 kill -9 0 했던 그 옛날 사건이 생각나는...

### Comment 26062

- Author: whizkyu
- Created: 2024-06-09T13:54:20+09:00
- Points: 1

흥미롭네요

### Comment 26049

- Author: neo
- Created: 2024-06-08T23:34:21+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40613287) 
- **고고학적 관점에서 흥미로움**: "pid 0은 [Linux] 커널의 일부"라는 말은 커널 디버깅 시 유용함. 사용자 공간 프로세스 관점에서는 "pid 0은 나 자신을 의미"함.
- **온라인에서의 과신**: 온라인에서 많은 사람들이 자신이 아는 것에 대해 과신함. 확신에 찬 어조는 전문가들만 사용해야 함.
- **Windows의 PID 0**: NT 기반 Windows에서 PID 0은 "System Idle Process"로 Linux와 유사함. DOS 기반 Windows에서는 PID 0이 없고, idle loop는 VMM32 안에 있음.
- **학문적 Unix에서의 PID 0**: 대부분의 학문적 Unix에서 PID 0은 메모리 서브시스템(paging)과 관련됨. Linux만이 PID 0 개념의 소유자가 아님.
- **일반 지식의 오류**: "일반 지식"이 잘못된 경우가 많음. 커널 소스 코드를 확인하는 것이 올바른 방법임.
- **PID 0의 세 번째 용도**: Linux에서 `getppid`가 0을 반환하는 경우는 부모가 다른 PID 네임스페이스에 있을 때임.
- **추가 자료 추천**: 초기 커널 부팅에 관심이 있다면, 이 훌륭한 자료를 읽어보길 권장함. [Linux Insides](https://0xax.gitbooks.io/linux-insides/content/)
- **ps -aux 명령어에 대한 질문**: "ps -aux" 명령어를 입력하면 다른 사용자들의 정보도 표시됨. 기본적으로 비공개 정보여야 하지 않음?
- **`kill 0`의 흥미로운 사용법**: `kill 0`을 사용하여 제한 시간 동안 명령어를 실행하고 종료하는 스크립트 공유.
- **v4 코드의 PID 0 재사용**: v4 코드가 pid 0을 재사용하는 것이 흥미로움. 80년대 중반에 커널에서 이 문제를 해결해야 했던 기억이 있음.
