>  기사  >  백엔드 개발  >  PHP에서 다중 프로세스 프로그래밍을 구현하는 방법

PHP에서 다중 프로세스 프로그래밍을 구현하는 방법

墨辰丷
墨辰丷원래의
2018-05-19 10:56:481472검색

이 글은 주로 PHP 다중 프로세스 프로그래밍 방법을 소개하고, PHP 다중 프로세스 프로그래밍의 개념, 사용법, 관련 기능 및 사용 기술을 더 자세히 분석합니다.

$ php -m 명령은 PHP에 pcntl 및 posix 확장이 설치되어 있는지 확인합니다. 사용 시나리오:
1. 많은 시간이 소요되는 네트워크 작업이 필요합니다. 계산이 필요하며 시스템에는 여러 개의 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 &#39;原始父进程:&#39; . $parentPid . PHP_EOL;
//创建子进程,返回子进程id
$pid = pcntl_fork();
if( $pid == -1 ){
  exit("fork error");
}
//pcntl_fork 后,父进程返回子进程id,子进程返回0
echo &#39;ID : &#39; . $pid . PHP_EOL;
if( $pid == 0 ){
  //子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程
  $mypid = getmypid(); // 用getmypid()函数获取当前进程的PID
  echo &#39;I am child process. My PID is &#39; . $mypid . &#39; and my fathers PID is &#39; . $parentPid . PHP_EOL;
} else {
  //父进程fork之后,返回的就是子进程的pid号,pid不为0
  echo &#39;Oh my god! I am a father now! My childs PID is &#39; . $pid . &#39; and mine is &#39; . $parentPid . PHP_EOL;
}
$aa = shell_exec("ps -af | grep index.php");
echo $aa;

예 2: 포크 플러딩을 방지하기 위해 여러 하위 프로세스 열기
<?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo &#39;原始父进程:&#39; . $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 &#39;子进程:&#39; . getmypid() . PHP_EOL;
    exit(); //子进程逻辑执行完后,马上退出,以免往下走再fork子进程,不好控制  
  } else {
    echo &#39;父进程:&#39; . getmypid() . PHP_EOL;
  }
}
echo getmypid() . PHP_EOL;
$aa = shell_exec("ps -af | grep index.php");
echo $aa;

참고:

via pcntl_XX X 시리즈 기능은 주로 프로세스 기능을 사용합니다. 참고: pcntl_XXX는 php CLI(명령줄) 환경에서만 실행할 수 있습니다. 웹 서버 환경에서는 예측할 수 없는 결과가 발생할 수 있으므로 주의해서 사용하세요!

관련 권장 사항:

PHP는 파일 잠금 기반 솔루션을 구현합니다. 다중 프로세스

동시에 파일 읽기 및 쓰기

Php다중 프로세스프로그래밍 예제 구현

PHP 구현하다

다중 프로세스

및 멀티스레딩


위 내용은 PHP에서 다중 프로세스 프로그래밍을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.