내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
데몬(elf) 프로세스는 Linux의 백그라운드 서비스 프로세스로, 일반적으로 제어 터미널과 독립적이며 특정 작업을 수행하거나 특정 이벤트가 발생할 때까지 기다립니다.
chdir()
기능: 마운트할 수 없는 파일 시스템을 점유하지 않도록 다른 경로로 변경할 수도 있습니다.#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
void daemonize(void)
{
pid_t pid;
/*
* 成为一个新会话的首进程,失去控制终端
*/
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
} else if (pid != 0) /* parent */
exit(0);
setsid();
/*
* 改变当前工作目录到/目录下.
*/
if (chdir("/") < 0) {
perror("chdir");
exit(1);
}
/* 设置umask为0 */
umask(0);
//重定向0,1,2文件描述符到 /dev/null,因为已经失去控制终端,再操作0,1,2没有意义.
close(0);
open("/dev/null", O_RDWR);
dup2(0, 1);
dup2(0, 2);
}
int main(void) {
daemonize();
while(1);
/* 在此循环中可以实现守护进程的核心工作 */
}
이 프로그램을 실행하면 데몬 프로세스가 되며 더 이상 현재 터미널과 연결되지 않습니다. ps 명령으로는 볼 수 없습니다. 이를 보려면 x 매개변수와 함께 ps 명령을 실행해야 합니다. 또한 터미널 창을 닫거나 로그아웃해도 데몬 실행에는 영향을 미치지 않는 것을 확인할 수 있습니다.
데몬 프로세스를 제어 터미널과 분리해야 하는 이유는 무엇입니까?
단말기와 분리된 이유는 어떤 단말기에서 생성된 정보로 인해 프로세스가 중단되는 것을 방지하기 위함이며, 실행 중 해당 정보는 어떤 단말기에도 표시되지 않습니다.Linux에서는 각 시스템이 사용자와 통신하는 인터페이스를 터미널이라고 부르므로 이 터미널에서 실행을 시작하는 모든 프로세스는 다음 사항에 의존합니다.
이 터미널에 연결된 이 터미널을 이러한 프로세스의 제어 터미널이라고 합니다. 제어 터미널이 닫히면 해당 프로세스가 자동으로 닫힙니다. 그러나 많은 애플리케이션은 데이터베이스, 웹 서비스, 게임 서비스 등과 같은 인터럽트를 끄지 않고 프로세스를 종료하는 것을 원하지 않습니다. 이때 데몬 프로세스를 사용해야 합니다.
이 기사에서는 데몬 프로세스의 개념, 데몬 프로세스의 프로그래밍 단계, 코드 구현 및 데몬 프로세스의 역할을 소개합니다. 백그라운드 프로그램 등의 작동 원리를 이해하도록 도와주세요.