프로세스 제어
프로세스 제어 (PCNTL)
PHP에서 유닉스 방식의 프로세스 생성, 프로그램 실행, 시그널 처리, 프로세스 종료를 구현하게 해주는 확장이에요. 프로세스를 직접 다뤄야 하는 CLI 프로그램에서 자주 사용합니다.
출처: Process Control
본문
PCNTL은 유닉스 스타일의 프로세스 생성·프로그램 실행·시그널 처리·프로세스 종료를 PHP에 구현한 것입니다.
먼저 꼭 알아두어야 할 제약이 있어요. 프로세스 제어는 웹 서버 환경에서 활성화하지 말아야 합니다. 웹 서버 환경에서 프로세스 제어 함수를 쓰면 예상치 못한 결과가 생길 수 있어요. 그래서 PCNTL은 기본적으로 CLI 환경에서 쓰는 확장입니다.
이 문서는 각 프로세스 제어 함수의 일반적인 사용법을 설명하기 위한 것이에요. 유닉스 프로세스 제어에 대한 자세한 내용은 시스템 문서(예: fork(2), waitpid(2), signal(2))나 W. Richard Stevens의 Advanced Programming in the UNIX Environment 같은 종합 참고서를 보는 것을 권장합니다.
PCNTL은 이제 시그널 처리 콜백 메커니즘으로 틱(ticks)을 사용하는데, 이전 메커니즘보다 훨씬 빠릅니다. 이 변경은 "user ticks"와 같은 의미론을 따릅니다. declare() 문으로 프로그램에서 콜백이 발생할 수 있는 위치를 지정해 주면 되고, 이를 통해 비동기 이벤트를 처리하는 오버헤드를 최소화할 수 있어요. 과거에는 pcntl을 활성화한 채 PHP를 컴파일하면, 스크립트가 실제로 pcntl을 쓰지 않아도 항상 이 오버헤드가 발생했는데, 이제는 그렇지 않습니다.
이 확장은 Windows 플랫폼에서는 사용할 수 없어요.
대표적인 함수로는 pcntl_fork(), pcntl_waitpid(), pcntl_signal(), pcntl_exec(), pcntl_kill() 등이 있습니다.