이 글에서는 주로 PHP 멀티프로세스 프로그래밍 방법을 소개하고, PHP 멀티프로세스 프로그래밍의 개념, 사용법, 관련 기능 및 활용 기술을 좀 더 자세히 분석합니다. 예제를 통한 프로세스 프로그래밍. 참조용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
1단계:$ php -m 명령을 사용하여 php에 pcntl 및 posix 확장이 설치되어 있는지 확인하고, 그렇지 않은 경우 설치합니다.
사용 시나리오:1. 네트워크에서 많은 시간이 소요되는 작업을 수행합니다
2. 많은 양의 계산이 필요하며 시스템에는 사용자에게 더 빠른 경험을 제공하기 위해 여러 개의 CPU가 있습니다. 여러 개의 작은 작업으로 나누어 최종적으로 병합되었습니다.pcntl_alarm
— 프로세스에 대한 알람 시계 신호 설정 pcntl_errno
— 별칭 pcntl_strerrorpcntl_exec
— 현재 프로세스 공간에서 지정된 프로그램 실행 pcntl_ fork
— 하위 프로세스를 생성하고, 현재 프로세스의 현재 위치에 분기(하위 프로세스)를 생성합니다. 주석: 포크는 자식 프로세스를 생성합니다. 부모 프로세스와 자식 프로세스 모두 포크 위치에서 계속 실행됩니다. 차이점은 부모 프로세스가 실행되는 동안 포크의 반환 값은 자식 프로세스 번호라는 것입니다. 프로세스는 0을 얻습니다. pcntl_get_last_error
— 실패한 마지막 pcntl 함수에 의해 설정된 오류 번호 검색 pcntl_getpriority
— 모든 프로세스의 우선순위 가져오기 pcntl_setpriority
— 모든 프로세스의 우선순위 수정 pcntl_signal_dispatch
— 호출 대기 신호 프로세서 pcntl_signal
— 신호 처리기 설치 pcntl_sigprocmask
— 차단 신호 설정 또는 검색 pcntl_sigtimedwait
— 시간 제한이 있는 신호 대기 pcntl_sigwaitinfo
— 신호 대기 pcntl_strerror
— 주어진 errno와 관련된 시스템 오류 메시지가 있습니다. pcntl_wait
— 포크의 하위 프로세스 상태를 기다리거나 반환 pcntl_waitpid
— 포크의 하위 프로세스 상태를 기다리거나 반환 pcntl_wexitstatus
— 중단된 하위 프로세스의 반환 코드 반환 pcntl_wifexited
— 확인 상태 코드가 정상적인 종료를 나타내는지 여부입니다. pcntl_wifsignaled
- 하위 프로세스 상태 코드가 신호로 인한 중단을 나타내는 지 확인합니다. — 하위 프로세스의 원인을 반환합니다. 프로세스 중단 신호
예 1:
<?php //最早的进程,也是父进程 $parentPid = getmypid(); echo '原始父进程:' . $parentPid . PHP_EOL; //创建子进程,返回子进程id $pid = pcntl_fork(); if( $pid == -1 ){ exit("fork error"); } //pcntl_fork 后,父进程返回子进程id,子进程返回0 echo 'ID : ' . $pid . PHP_EOL; if( $pid == 0 ){ //子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程 $mypid = getmypid(); // 用getmypid()函数获取当前进程的PID echo 'I am child process. My PID is ' . $mypid . ' and my fathers PID is ' . $parentPid . PHP_EOL; } else { //父进程fork之后,返回的就是子进程的pid号,pid不为0 echo 'Oh my god! I am a father now! My childs PID is ' . $pid . ' and mine is ' . $parentPid . PHP_EOL; } $aa = shell_exec("ps -af | grep index.php"); echo $aa;
<?php //最早的进程,也是父进程 $parentPid = getmypid(); echo '原始父进程:' . $parentPid . PHP_EOL; //开启十个子进程 for($i = 0; $i < 10; $i++) { $pid = pcntl_fork(); if($pid == -1) { echo "Could not fork!\n"; exit(1); } //子进程 if(!$pid) { //child process workspace echo '子进程:' . getmypid() . PHP_EOL; exit(); //子进程逻辑执行完后,马上退出,以免往下走再fork子进程,不好控制 } else { echo '父进程:' . getmypid() . PHP_EOL; } } echo getmypid() . PHP_EOL; $aa = shell_exec("ps -af | grep index.php"); echo $aa;
참고:
pcntl_XXX 일련의 기능을 통해 다중 프로세스 기능을 사용하십시오. 참고: pcntl_XXX는 php CLI(명령줄) 환경에서만 실행할 수 있습니다. 웹 서버 환경에서는 예측할 수 없는 결과가 발생할 수 있으므로 주의해서 사용하세요!
위 내용은 PHP의 다중 프로세스 프로그래밍에 대한 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!