How to enable pcntl module and implement multi-process programming in PHP?

王林
Release: 2023-02-23 13:14:01
forward
4395 people have browsed it

First check the PHP version I installed:

PHP 7.3.7 (cli) (built: Jul 12 2019 22:25:55) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
Copy after login

php needs to install the pcntl module to implement multi-process. This module is officially provided by php, so we can use it in PHP Found in the source code, download the php7.3.7 source code and extract it to the /home directory. At this time, the extension pcntl we need is at/home/php-7.3.7/ext/pcntl

Execute the following commands in sequence:

phpize ./configure --with-php-config=/usr/local/bin/php-config make & make install
Copy after login

To determine the path of thephp-configfile, you can usefind / -name php-configand finally generatepcntl.sofile.

Then find the path where the ini file of php is located and use thephp --inicommand to view

As for the path of the php extension module, you can usephp -i | grep extension_dirCheck, then copy the generated so file to the module path and addextension=pcntlto the php.ini file

Use php -m to check whether the module is loaded ! At this point, the pcntl module is installed. Let’s start coding.

for ($i = 0; $i < 3; $i++){ $pid = pcntl_fork(); if ($pid == -1) { die("开启进程失败"); } elseif ($pid) { echo "启动子进程 $pid \n"; } else { echo "子进程 ".getmypid()." 正在处理任务\n"; sleep(rand(5,10)); exit; } } while (pcntl_waitpid(0, $status) != -1) { $status = pcntl_wexitstatus($status); echo "子进程推出,状态码 $status \n"; }
Copy after login

pcntl_fork()The function creates a child process. When successful, the PID of the generated child process is returned in the execution thread of the parent process. , returns 0 in the child process execution thread. On failure, -1 is returned in the parent process context, the child process is not created, and a PHP error is raised.

pcntl_waitpid()— Wait for or return the child process status of fork, suspend the execution of the current process until the process with the process number specified by the parameter pid exits, or a signal is received to interrupt the current process. Process or call a signal handling function. The returned value can be -1, 0 or >0. If it is -1, it means that the child process has an error. If >0, it means that the child process has exited and the value is the pid of the exiting child process. As for how to exit, you can pass $status status code response

root@4226aaf8d937:/home/demo# php index.php 启动子进程 150 启动子进程 151 启动子进程 152 子进程 152 正在处理任务 子进程 151 正在处理任务 子进程 150 正在处理任务 子进程推出,状态码 0 子进程推出,状态码 0 子进程推出,状态码 0
Copy after login
root@4226aaf8d937:/# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 3976 3180 pts/0 Ss 04:42 0:00 bash root 17 0.0 0.3 3868 3184 pts/1 Ss 04:48 0:00 bash root 149 0.3 2.1 79740 21888 pts/0 S+ 06:18 0:00 php index.php root 150 0.0 0.6 79740 6664 pts/0 S+ 06:18 0:00 php index.php root 151 0.0 0.6 79740 6604 pts/0 S+ 06:18 0:00 php index.php root 152 0.0 0.6 79740 6604 pts/0 S+ 06:18 0:00 php index.php root 153 0.0 0.2 7640 2660 pts/1 R+ 06:18 0:00 ps -aux
Copy after login

How to deal with when the child process is forcibly killed using kill -9 process id?


        
Copy after login

pcntl_wifexited— Check whether the status code represents a normal exit

pcntl_wifsignaled— Check whether the child process status code represents a normal exit Interrupted by a signal

pcntl_wtermsig—Returns the signal that caused the child process to be interrupted

We open one of the two windows:

How to enable pcntl module and implement multi-process programming in PHP?

How to enable pcntl module and implement multi-process programming in PHP?

For more information, please visit the PHP Chinese website:PHP Video Tutorial

The above is the detailed content of How to enable pcntl module and implement multi-process programming in PHP?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!