Analyzing the Patron Saint of Linux
- The biggest differences are as follows:
- (a) The daemon process has completely separated from the terminal console, but the background program has not completely separated from the terminal (results will still be output to the terminal before the terminal is closed);
- (b) The daemon process will not be affected when closing the terminal console, but the background program will stop when the user exits. It needs to be run in the nohup command & format to avoid the impact;
- (c) The session group, current directory, and file descriptors of the daemon process are independent. Running in the background is just a fork of the terminal to allow the program to execute in the background. None of this has changed;
Daemon is a special process that runs in the background. It is separated from the terminal. This prevents the process from being interrupted by signals generated by any terminal. The information generated during the execution of the process is not stored in any terminal. displayed on. A daemon process periodically performs certain tasks or waits for processing of certain events that occur. Most Linux servers are implemented using daemon processes.
-
- Shielding some signals related to the control terminal operation is to prevent the control terminal from being disturbed and exiting or hanging before the daemon process is started normally. code show as below:
/* 处理可能的终端信号 */ signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGHUP , SIG_IGN);
- Run in the background.
/* 是父进程,结束父进程,子进程继续 */ if(fork()) exit(0);
- Leave the control terminal and process group:
- (1) A process belongs to a process group, and the process group number (PGID) is the process number (PID) of the process group leader
- (2) Processes in the same process group share a control terminal. This control terminal defaults to the terminal where the process was created
- (3) The control terminal and process group associated with a process are usually inherited from the parent process. Therefore, the child process is still affected by the terminal of the parent process, because the signals generated by the terminal will be sent to all the foreground process groups. process.
Based on the above reasons, it is necessary to completely get rid of the influence of the terminal for the child process. It is necessary to call setsid() to make the child process the new session leader. The code is as follows:
setsid();
After the setsid() call is successful, the process calling this function becomes the new session group leader and new process group leader, and is separated from the original process group. Due to the exclusivity of the session process to the controlling terminal, the process is detached from the controlling terminal at the same time.
- To prohibit the process from reopening the control terminal, the method used is to create a child process again and let the parent process exit. The child process is no longer the session leader, thus achieving the goal. code show as below:
/* 结束第一子进程,第二子进程继续 */ if(fork()) exit(0);
- Close the open file descriptor. Because a process inherits open file descriptors from the parent process that created it, they are generally no longer needed. If it is not closed, system resources will be wasted. code show as below:
#define NOFILE 256 for(i=0; i
- Change the current working directory. While a process is active, the file system containing its working directory cannot be unmounted. Therefore, you need to change the daemon's working directory to an appropriate directory. code show as below:
chdir("/tmp");
- Reset file creation mask. A process inherits the file creation mask from the parent process that created it. It may modify the access permissions of files created by the daemon. code show as below:
umask(0);
- Handle the SIGCHLD signal (child process exit signal). If you do not wait for the child process to end, the child process will become a zombie process and occupy system kernel resources.
/* 将子进程退出信号设为SIG_IGN,让系统帮助回收进程资源 */ signal(SIGCHLD, SIG_IGN);
The overall code is as follows:
#define NOFILE 256 void DaemonMode() { int num = 0; int fd0, fd1, fd2; /* 屏蔽可能的信号 */ signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGHUP , SIG_IGN); if(fork()) exit(0); setsid(); if(fork()) exit(0); chdir("/tmp/httpd"); umask(0); for(; num
- Shielding some signals related to the control terminal operation is to prevent the control terminal from being disturbed and exiting or hanging before the daemon process is started normally. code show as below:
If the calling process is already the leader of a process group, this function returns an error. In order to prevent this situation, fork() is usually called to create a child process, and then its parent process is terminated, while the child process continues, and this function is called in the child process.
If the process calling this function is not a process group leader, this function will create a new session, and the process calling the setsid() function will become the leader process of the new session, and will be associated with the session group and process group of its parent process. Detach. Because the session is exclusive to the controlling terminal, the process is simultaneously detached from the controlling terminal.
The above is the detailed content of Analyzing the Patron Saint of Linux. For more information, please follow other related articles on the PHP Chinese website!

Linuxusesdecentralized,distribution-specificpackagemanagersforpatchmanagement,whileWindowsemploysacentralizedWindowsUpdatesystem.Linux'sapproachoffersflexibilitybutcanbecomplexacrossdistributions,whereasWindowsprovidesastreamlinedbutlessflexibleupdat

Virtual Data Rooms (VDRs) offer secure document storage and sharing, ideal for sensitive business information. This article explores three open-source VDR solutions for on-premises deployment on Linux, eliminating the need for cloud-based services a

Upscayl: Your Free and Open-Source Solution for High-Resolution Images on Linux Linux users who frequently work with images know the frustration of low-resolution pictures. Luckily, Upscayl offers a powerful, free, and open-source solution. This des

The terminal emulator landscape is evolving rapidly, with developers leveraging modern hardware, GPU acceleration, containerization, and even AI/LLMs to enhance console experiences. Enter Ghostty, a new open-source, cross-platform terminal emulator

Innotop: Powerful MySQL monitoring command line tool Innotop is an excellent command line program, similar to the top command, used to monitor local and remote MySQL servers running under the InnoDB engine. It provides a comprehensive set of features and options to help database administrators (DBAs) track various aspects of MySQL performance, troubleshoot issues and optimize server configuration. Innotop allows you to monitor critical MySQL metrics, such as: MySQL replication status User statistics Query list InnoDB buffer pool InnoDB I/O Statistics Open table Locked table etc… The tool regularly refreshes its data to provide server status

Restic: Your Comprehensive Guide to Secure Linux Backups Data loss can cripple a Linux system. Accidental deletions, hardware failures, or system corruption necessitate a robust backup strategy. Restic is a leading solution, providing speed, securi

Top 10 Most Popular Linux Distributions in 2025 Entering 2025, we are excited to share with Linux enthusiasts the most popular distribution this year so far. DistroWatch has always been the most reliable source of information about open source operating systems, with particular attention to Linux distributions and BSD versions. It continuously collects and presents a lot of information about Linux distributions, making them easier to access. While it doesn't measure the popularity or usage of a distribution very well, DistroWatch remains the most accepted measure of popularity within the Linux community. It uses page click ranking (PHR) statistics to measure the popularity of Linux distributions among website visitors. [You can

Linux Window Managers: A Comprehensive Guide to the Best Tiling Options Linux window managers orchestrate how application windows behave, quietly managing the visual arrangement of your open programs. This article explores top-tier tiling window man


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

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SublimeText3 English version
Recommended: Win version, supports code prompts!

Atom editor mac version download
The most popular open source editor

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

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.
