PHP implements daemon process
Daemon process
As a resident process service, the daemon process is very common, such as PHP-FPM, NGINX, REDIS, both require a parent process to support the entire service. However, it is rare to write a daemon process in PHP. Let’s use PHP to implement it today.
Steps
● Fork the child process
● Parent process exits
● Set up a new session
● Reset file mask
● Close standard input and output
Implementation
We follow the above steps to implement, before that we need pcntl and posix extensions, make sure they are installed.
function daemon() { $pid = pcntl_fork(); // fork 失败 if ($pid < 0) { exit('fork failed'); } else if ($pid > 0) { // 退出父进程 exit(0); } // 设置新的会员 // setsid 有几个注意点 // 不能是进程组的组长调用 // 对于进程组组员调用会产生新的会话和进程组,并成为该进程组的唯一成员,调用的进程将脱离终端 if (posix_setsid() < 0) { exit('set sid failed'); } // 重置文件掩码 umask(0); // 切换工作目录 chdir('/'); // 关闭标准输入输出 fclose(STDIN); fclose(STDOUT); fclose(STDERR); }
Details
// 获取进程ID var_dump(posix_getpid()); // 获取进程组ID var_dump(posix_getpgid(posix_getpid())); // 获取进程会话ID var_dump(posix_getsid(posix_getpid()));
The three results are the same, indicating that the process is the session leader even if it is the leader of the process group.
Why umask is needed (0)
When you call umask in linux, you will see a mask value. This mask determines the permissions for the files you create. Scope, for example, the umask of my current machine is
0022
The maximum permission of the file is 0666, and the maximum permission of the directory is 0777, then the directory created by the current user The permission is 0755, which is rwx-rx-rx permission for the current user. The file is 0644, which has rw-r-r permissions for the current user. So if there is no reset mask, it will be 0755 for directories and 0644 for files.
Note
If you use functions such as echo var_dump in the process, be sure to redirect the standard output to other file streams. Just add the following code.
global $stdin, $stdout, $stderr; $stdin = fopen('/dev/null', 'r'); $stdout = fopen('/www/php/txt.txt','wb'); $stderr = fopen('/dev/null', 'wb');
Because the standard input and output has been closed above, the file descriptor fd is no longer available. After reopening, fd will be 0, 1, and 2 starting from non-negative. Files that just serve as standard input and output. Of course, you need to set up the redirection there yourself.
The last second fork
This issue needs to be carefully considered, because it is not necessary. Currently, I can't think of any scenario where Fork is necessary twice.
The above is the detailed content of PHP implements daemon process. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
