Home System Tutorial LINUX Analyzing the Patron Saint of Linux

Analyzing the Patron Saint of Linux

Apr 29, 2024 pm 12:28 PM
linux linux tutorial Red Hat linux system linux command linux certification red hat linux linux video

The difference between background process and daemon process
    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;

Analyzing the Patron Saint of Linux

Characteristics of daemon process

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.

Key points of daemon programming
    1. 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);
      
      Copy after login
    2. Run in the background.
      /* 是父进程,结束父进程,子进程继续 */
      if(fork())
          exit(0);
      
      Copy after login
    3. 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();
      Copy after login

      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.

    4. 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);
      
      Copy after login
    5. 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
      Copy after login

    6. 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");
      Copy after login
    7. 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);
      
      Copy after login
    8. 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);
      Copy after login

      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
      Copy after login

Supplementary setsid() function function:

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!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1662
14
PHP Tutorial
1261
29
C# Tutorial
1234
24
Linux Architecture: Unveiling the 5 Basic Components Linux Architecture: Unveiling the 5 Basic Components Apr 20, 2025 am 12:04 AM

The five basic components of the Linux system are: 1. Kernel, 2. System library, 3. System utilities, 4. Graphical user interface, 5. Applications. The kernel manages hardware resources, the system library provides precompiled functions, system utilities are used for system management, the GUI provides visual interaction, and applications use these components to implement functions.

How to check the warehouse address of git How to check the warehouse address of git Apr 17, 2025 pm 01:54 PM

To view the Git repository address, perform the following steps: 1. Open the command line and navigate to the repository directory; 2. Run the "git remote -v" command; 3. View the repository name in the output and its corresponding address.

vscode Previous Next Shortcut Key vscode Previous Next Shortcut Key Apr 15, 2025 pm 10:51 PM

VS Code One-step/Next step shortcut key usage: One-step (backward): Windows/Linux: Ctrl ←; macOS: Cmd ←Next step (forward): Windows/Linux: Ctrl →; macOS: Cmd →

What is the main purpose of Linux? What is the main purpose of Linux? Apr 16, 2025 am 12:19 AM

The main uses of Linux include: 1. Server operating system, 2. Embedded system, 3. Desktop operating system, 4. Development and testing environment. Linux excels in these areas, providing stability, security and efficient development tools.

How to run java code in notepad How to run java code in notepad Apr 16, 2025 pm 07:39 PM

Although Notepad cannot run Java code directly, it can be achieved by using other tools: using the command line compiler (javac) to generate a bytecode file (filename.class). Use the Java interpreter (java) to interpret bytecode, execute the code, and output the result.

How to run sublime after writing the code How to run sublime after writing the code Apr 16, 2025 am 08:51 AM

There are six ways to run code in Sublime: through hotkeys, menus, build systems, command lines, set default build systems, and custom build commands, and run individual files/projects by right-clicking on projects/files. The build system availability depends on the installation of Sublime Text.

laravel installation code laravel installation code Apr 18, 2025 pm 12:30 PM

To install Laravel, follow these steps in sequence: Install Composer (for macOS/Linux and Windows) Install Laravel Installer Create a new project Start Service Access Application (URL: http://127.0.0.1:8000) Set up the database connection (if required)

How to use VSCode How to use VSCode Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCode) is a cross-platform, open source and free code editor developed by Microsoft. It is known for its lightweight, scalability and support for a wide range of programming languages. To install VSCode, please visit the official website to download and run the installer. When using VSCode, you can create new projects, edit code, debug code, navigate projects, expand VSCode, and manage settings. VSCode is available for Windows, macOS, and Linux, supports multiple programming languages ​​and provides various extensions through Marketplace. Its advantages include lightweight, scalability, extensive language support, rich features and version

See all articles