이 글은 주로 PHP의 pcntl 프로세스 제어에 대한 pcntl_fork를 소개하고 있습니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
이 문서는 각 공정 제어 기능의 일반적인 사용법을 설명하는 데 사용됩니다. Unix 프로세스 제어에 대한 자세한 내용은 fork(2), waitpid(2), signal(2) 등에 관한 시스템 설명서를 참조하거나 "Unix 환경의 고급 프로그래밍"( 저자: W. Richard Stevens, Addison-Wesley).
PCNTL은 이제 신호 처리를 위한 콜백 메커니즘으로 틱을 사용합니다. 틱의 속도는 이전 처리 메커니즘을 훨씬 뛰어넘습니다. 이 변경은 "사용자 틱"과 동일한 의미를 따릅니다. 선언() 문을 사용하여 프로그램에서 콜백이 발생할 수 있는 위치를 지정할 수 있습니다. 이를 통해 비동기 이벤트 처리의 오버헤드를 최소화할 수 있습니다. PHP를 컴파일할 때 pcntl을 활성화하면 pcntl이 실제로 스크립트에서 사용되는지 여부에 관계없이 항상 이러한 오버헤드가 발생합니다.
한 가지 변경 사항은 PHP 4.3.0 이전의 모든 pcntl 스크립트가 작동하도록 하려면 콜백이 허용될 것으로 예상되는 부분(코드)에서 선언()을 사용하거나 새로운 스크립트를 사용한다는 것입니다. 선언()의 전역 구문을 스크립트 전체에서 유효하게 만드세요.
참고: 이 확장 프로그램은 Windows 플랫폼에서 사용할 수 없습니다.
공식 문서
pcntl_fork
# 来源官方 PHP 4 >= 4.1.0, PHP 5, PHP 7) pcntl_fork — 在当前进程当前位置产生分支(子进程)。译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。 说明 int pcntl_fork ( void ) pcntl_fork()函数创建一个子进程,这个子进程仅PID(进程号) 和PPID(父进程号)与其父进程不同。fork怎样在您的系统工作的详细信息请查阅您的系统 的fork(2)手册。 返回值 成功时,在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。
<?php /** * Created by PhpStorm. * User: Object * Date: 2018/6/11 * Time: 10:12 */ const NEWLINE = "\n\n"; if (strtolower(php_sapi_name()) != 'cli') { die("请在cli模式下运行"); } echo "当前进程:" . getmypid() . NEWLINE; $pid = pcntl_fork(); //fork出子进程 //fork后父进程会走自己的逻辑,子进程从处开始走自己的逻辑,堆栈信息会完全复制给子进程内存空间,父子进程相互独立 if ($pid == -1) { // 创建错误,返回-1 die('进程fork失败'); } else if ($pid) { // $pid > 0, 如果fork成功,返回子进程id // 父进程逻辑 $time = microtime(true); echo "我是父进程:{$time}".NEWLINE; } else { // $pid = 0 // 子进程逻辑 $time = microtime(true); echo "我是子进程:{$time}".NEWLINE; }
当前进程:17472 我是父进程:1528697500.2961 我是子进程:1528697500.2961
if ($pid == -1) { // 创建错误,返回-1 die('进程fork失败'); } else if (!$pid) { // $pid = 0 // 子进程逻辑 $time = microtime(true); echo "我是子进程:{$time}".NEWLINE; } else if ($pid) { // $pid > 0, 如果fork成功,返回子进程id // 父进程逻辑 $time = microtime(true); echo "我是父进程:{$time}".NEWLINE; }
테스트 요약fork는 먼저 상위 프로세스 로직을 실행한 다음 하위 프로세스 로직을 실행합니다위 내용이 이 글의 전체 내용입니다. 모두의 학습에 도움이 될 것입니다. 더 많은 관련 콘텐츠가 있습니다. PHP 중국어 웹사이트를 주목해주세요! 관련 권장사항:当前进程:17472 我是父进程:1528697500.2961 我是子进程:1528697500.2961로그인 후 복사로그인 후 복사PHP는 리플렉션을 사용하여 클래스와 일부 기본 애플리케이션을 가져옵니다.
# 🎜🎜#php는 공유 메모리 프로세스 통신 기능(_shm)을 구현합니다.(_shm)
위 내용은 PHP의 pcntl 프로세스 제어 pcntl_fork의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!