목차
什么是daemon
实现关注点
데몬이란 무엇입니까
우려 사항 구현
백엔드 개발 PHP 튜토리얼 데몬이란 무엇입니까? PHP에서 데몬을 구현하는 방법은 무엇입니까?

데몬이란 무엇입니까? PHP에서 데몬을 구현하는 방법은 무엇입니까?

Jun 23, 2021 pm 08:30 PM
php

데몬은 백그라운드에서 실행되며 특정 시스템 작업을 수행하는 데 사용되는 특수 프로세스입니다. 이 글에서는 PHP에서 데몬을 구현하는 방법과 프로그래밍 시 주의해야 할 사항을 소개합니다.

데몬이란 무엇입니까? PHP에서 데몬을 구현하는 방법은 무엇입니까?

PHP 구현 데몬은 pcntlposix 확장을 통해 구현할 수 있습니다. pcntlposix 扩展实现。

编程中需要注意的地方有:

  • 通过二次 pcntl_fork() 以及 posix_setsid 让主进程脱离终端
  • 通过 pcntl_signal() 忽略或者处理 SIGHUP 信号
  • 多进程程序需要通过二次 pcntl_fork() 或者 pcntl_signal() 忽略 SIGCHLD 信号防止子进程变成 Zombie 进程
  • 通过 umask() 设定文件权限掩码,防止继承文件权限而来的权限影响功能
  • 将运行进程的 STDIN/STDOUT/STDERR 重定向到 /dev/null 或者其他流上

如果要做的更好,还需要注意:

  • 如果通过 root 启动,运行时更换到低权限用户身份
  • 及时 chdir() 防止操作错误路径
  • 多进程程序考虑定时重启,防止内存泄露

什么是daemon

文章的主角守护进程(daemon),Wikipedia 上的定义是:

在一个多任务的电脑操作系统中,守护进程(英语:daemon,/ˈdiːmən/或/ˈdeɪmən/)是一种在后台执行的电脑程序。此类程序会被以进程的形式初始化。守护进程程序的名称通常以字母“d”结尾:例如,syslogd就是指管理系统日志的守护进程。
通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程运行fork,然后使其父进程立即终止,使得这个子进程能在init下运行。这种方法通常被称为“脱壳”。

UNIX环境高级编程(第二版)(以下使用简称 APUE 指代) 13章有云:

守护进程也成精灵进程( daemon )是生存周期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为他们没有控制终端,所以说他们是在后台运行的。

这里注意到,daemon有如下特征:

  • 没有终端
  • 后台运行
  • 父进程 pid 为1

想要查看运行中的守护进程可以通过 ps -ax 或者 ps -ef 查看,其中 -x 表示会列出没有控制终端的进程。

实现关注点

二次 fork 与 setsid

fork 系统调用

fork 系统调用用于复制一个与父进程几乎完全相同的进程,新生成的子进程不同的地方在于与父进程有着不同的 pid 以及有不同的内存空间,根据代码逻辑实现,父子进程可以完成一样的工作,也可以不同。子进程会从父进程中继承比如文件描述符一类的资源。

PHP 中的 pcntl 扩展中实现了 pcntl_fork() 函数,用于在 PHP 中 fork 新的进程。

setsid 系统调用

setsid 系统调用则用于创建一个新的会话并设定进程组 id。

这里有几个概念:会话进程组

在 Linux 中,用户登录产生一个会话(Session),一个会话中包含一个或者多个进程组,一个进程组又包含多个进程。每个进程组有一个组长(Session Leader),它的 pid 就是进程组的组 id。进程组长一旦打开一个终端,这一个终端就被称为控制终端。一旦控制终端发生异常(断开、硬件错误等),会发出信号到进程组组长。

后台运行程序(如 shell 中以&结尾执行指令)在终端关闭之后也会被杀死,就是没有处理好控制终端断开时发出的SIGHUP信号,而SIGHUP

프로그래밍에서 주의해야 할 사항은 다음과 같습니다. 🎜
  • 두 번째 pcntl_fork()posix_setsid를 사용하여 주요 프로세스를 가져옵니다. 터미널
  • pcntl_signal()을 통해 SIGHUP 신호를 무시하거나 처리합니다.
  • 다중 프로세스 프로그램은 를 두 번 전달해야 합니다. >pcntl_fork() 또는 pcntl_signal() SIGCHLD 신호를 무시하여 하위 프로세스가 좀비 프로세스가 되는 것을 방지합니다.
  • 파일 설정 파일 권한에서 상속된 권한이 기능에 영향을 미치지 않도록 umask()를 통한 권한 마스크
  • 실행 중인 프로세스의 STDIN/STDOUT/STDERR를 다음으로 리디렉션합니다. /dev/null 또는 기타 스트리밍
🎜더 나은 결과를 원한다면 다음 사항에도 주의를 기울여야 합니다. 🎜
  • 루트를 통해 시작하는 경우 , 실행할 때 낮은 권한의 사용자 ID로 변경
  • 적시에 chdir() 작업 오류 방지
  • 메모리 누수를 방지하려면 다중 프로세스 프로그램을 정기적으로 다시 시작하는 것이 좋습니다
🎜🎜

데몬이란 무엇입니까

🎜기사의 주인공 데몬 Wikipedia의 정의는 다음과 같습니다. 🎜
🎜멀티태스킹 컴퓨터 운영 체제에서 데몬(영어: daemon, /ˈdiːmən/ 또는 /ˈdeˈdeˈmən/)은 백그라운드에서 실행되는 컴퓨터 프로그램입니다. 이러한 프로그램은 프로세스로 초기화됩니다. 데몬 프로그램의 이름은 일반적으로 문자 "d"로 끝납니다. 예를 들어 syslogd는 시스템 로그를 관리하는 데몬을 나타냅니다.
일반적으로 데몬 프로세스에는 기존 상위 프로세스(즉, PPID=1)가 없으며 UNIX 시스템 프로세스 계층에서 init 바로 아래에 있습니다. 데몬 프로그램은 일반적으로 하위 프로세스에서 포크를 실행한 다음 하위 프로세스가 init에서 실행될 수 있도록 상위 프로세스를 즉시 종료하여 자체적으로 데몬을 만듭니다. 이 방법을 흔히 "쉘링"이라고 합니다. 🎜
🎜UNIX 환경의 고급 프로그래밍(제2판)(이하 약어) APUE가 사용함) 13장에 🎜
🎜 데몬 프로세스도 데몬 프로세스(daemon)인데, 수명주기가 긴 프로세스라고 하네요. 시스템이 부팅될 때 시작되고 시스템이 종료될 때만 종료되는 경우가 많습니다. 제어 터미널이 없기 때문에 백그라운드에서 실행된다고 합니다. 🎜
🎜데몬은 다음과 같은 특징을 가지고 있습니다: 🎜
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles