Compartir tecnología

Serie Android C: demonio de Linux

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Concepto

El proceso Daemon (elf) es un proceso de servicio en segundo plano en Linux. Es un proceso con una larga vida útil. Generalmente es independiente del terminal de control y periódicamente realiza ciertas tareas o espera que ocurran ciertos eventos.

2. modelo

2.1 Pasos de programación del demonio

  1. Cree un proceso hijo, el proceso padre sale y todo el trabajo se realiza en el proceso hijo: formalmente separado del terminal de control;
  2. Cree una nueva función setsid () de sesión en el proceso hijo, lo que hace que el proceso hijo sea completamente independiente y fuera de control;
  3. Cambie el directorio actual al directorio raíz chdir()Función: para evitar ocupar el sistema de archivos desmontable, también puede cambiarlo a otras rutas;
  4. Restablecer la máscara de permiso de archivo: la función umask() evita que las máscaras de creación de archivos heredadas nieguen ciertos permisos para aumentar la flexibilidad del proceso del demonio;
  5. Cierre el descriptor del archivo: el archivo abierto heredado no se utilizará, lo que desperdicia recursos del sistema y no se puede desinstalar;
  6. Comience a ejecutar el trabajo central del proceso del demonio;
  7. Procesamiento de salida del demonio.

2.2 Modelo de código

#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);
	/* 在此循环中可以实现守护进程的核心工作 */
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

Cuando ejecuta este programa, se convierte en un proceso demonio y ya no está asociado con la terminal actual. No puede verlo con el comando ps. Debe ejecutar el comando ps con el parámetro x para verlo. Además, puede ver que cerrar la ventana de la terminal o cerrar sesión no afectará la ejecución del demonio.

3. Papel del proceso demonio

¿Por qué es necesario separar el proceso del demonio del terminal de control?

La razón por la que está separado del terminal es para evitar que el proceso sea interrumpido por información generada por cualquier terminal, y su información durante la ejecución no se mostrará en ningún terminal.Dado que en Linux la interfaz a través de la cual cada sistema se comunica con los usuarios se llama terminal, cada proceso que comience a ejecutarse desde esta terminal dependerá de
Adjunto a este terminal, este terminal se denomina terminal de control de estos procesos. Cuando el terminal de control está cerrado, los procesos correspondientes se cerrarán automáticamente. Sin embargo, muchas de nuestras aplicaciones no quieren salir del proceso sin desactivar las interrupciones, como bases de datos, servicios web, servicios de juegos, etc. En este momento, necesitamos utilizar un proceso demonio.

4. Resumen

Este artículo presenta el concepto de proceso demonio, los pasos de programación del proceso demonio, la implementación del código y la función del proceso demonio. Ayúdenos a comprender los principios operativos de los programas en segundo plano, etc.