본문 바로가기
리눅스

Process identifier

by 다움위키 2023. 12. 9.

컴퓨팅에서, 프로세스 식별자 (일명 프로세스 ID 또는 PID)는 Unix, macOSWindows와 같은 대부분의 운영 시스템 커널에 의해 활성 프로세스를 고유하게 식별하기 위해 사용되는 숫자입니다. 이 숫자는 다양한 함수 호출에서 매개변수로 사용될 수 있으며, 프로세스의 우선순위를 조정하거나 그것을 전부 죽이는 것과 같은 프로세스를 조작되도록 허용합니다.

Unix-like

유닉스-계열 운영 시스템에서, 새로운 프로세스는 fork() 시스템 호출에 의해 생성됩니다. PID는 부모 프로세스로 반환되어, 추가 함수 호출에서 자식 프로세스를 참조하는 것을 활성화합니다. 부모 프로세스는, 예를 들어, waitpid() 함수로 종료하거나 kill()로 프로세스를 종료하기 위해 자식 프로세스를 기다릴 수 있습니다.

특별히 구별되는 프로세스 ID를 가진 두 가지 임무가 있습니다: swapper 또는 sched는 프로세스 ID 0을 가지고 페이징을 담당하고, 실제로 정규 사용자-모드 프로세스가 아니라 커널의 일부입니다. 프로세스 ID 1은 보통 시스템 시작과 종료를 주로 담당하는 초기화 프로세스입니다. 원래, 프로세스 ID 1은 임의의 기술적 조치로 초기화를 위해 특별히 예약되지 않았습니다: 그것은 단순히 커널에 의해 호출된 첫 번째 프로세스의 자연스러운 결과로 이 ID를 가졌습니다. 보다 최근의 유닉스 시스템은 전형적으로 '프로세스'로 표시되는 추가 커널 구성 요소를 가지며, 이것에서 PID 1은 이전 시스템과의 일관성을 유지하기 위해 init 프로세스를 위해 적극적으로 예약되어 있습니다.

프로세스 ID는, 첫 번째 위치에서, 보통 0에서 시작하여 시스템마다 다른 최댓값까지 증가하는 순차적 기초 위에 할당됩니다. 일단 이 제한에 도달하면, 할당이 300에서 다시 시작되고 다시 증가합니다. macOSHP-UX에서, 할당이 100에서 다시 시작됩니다. 어쨌든, 이것과 순차적 통과에 대해 프로세스에 여전히 할당된 임의의 PID는 건너뜁니다. 어떤 사람들은 이것이 시스템에 대한 정보가 추출되거나 메시지가 프로세스 사이에 은밀하게 전달될 수 있다는 점에서 잠재적인 보안 취약점으로 고려합니다. 그것에 따라서, 보안에 특히 관심이 있는 구현은 다른 PID 할당 방법을 선택할 수 있습니다. MPE/iX와 같은 일부 시스템에서, 가장 낮은 사용 가능한 PID가 사용되며, 때로는 메모리에서 프로세스 정보 커널 페이지 수를 최소화하기 위한 노력으로 사용됩니다.

현재 프로세스 ID는 getpid() 시스템 호출에 의해, 또는 쉘에서 변수 $$로 제공됩니다. 부모 프로세스의 프로세스 ID는 getppid() 시스템 호출에 의해 얻어집니다.

리눅스에서, 최대 프로세스 ID는 유사-파일 /proc/sys/kernel/pid_max에 의해 제공됩니다.

Pidfile

일부 프로세스, 예를 들어, moc 음악 플레이어와 MySQL 데몬은 PID를 문서화된 파일 위치에 다른 프로세스에게 그것을 조회하는 것을 허용하기 위해 씁니다.

Microsoft Windows

Windows 운영 시스템 제품군에서, Windows API의 GetCurrentProcessId() 함수를 사용하여 현재 프로세스의 ID를 가져오고, GetProcessId()를 사용하여 다른 프로세스의 ID를 가져올 수 있습니다. 내부적으로, 프로세스 ID는 클라이언트 ID라고 불리고, 스레드 ID와 같은 이름공간에서 할당되므로, 이들 둘은 절대 겹치지 않습니다. 시스템 유휴 프로세스는 프로세스 ID 0으로 주어집니다. 시스템 프로세스Windows 2000에서 프로세스 ID 8으로 주어지고, Windows XPWindows Server 2003에서 4로 주어집니다. Windows NT 제품군 운영 시스템에서, 프로세스와 스레드 식별자는 모두 4의 배수이지만, 그것은 사양의 일부가 아닙니다.