Condivisione della tecnologia

Android serie C: demone Linux

2024-07-12

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

1. Concetto

Il processo Daemon (elf) è un processo di servizio in background in Linux È un processo con una lunga durata. Di solito è indipendente dal terminale di controllo ed esegue periodicamente determinate attività o attende che si verifichino determinati eventi.

2. Modello

2.1 Passaggi di programmazione del demone

  1. Crea un processo figlio, il processo genitore termina e tutto il lavoro viene eseguito nel processo figlio: formalmente separato dal terminale di controllo;
  2. Crea una nuova funzione setid() di sessione nel processo figlio, rendendo il processo figlio completamente indipendente e fuori controllo;
  3. Cambia la directory corrente nella directory root chdir()Funzione: per evitare di occupare il file system non montabile, è anche possibile modificarlo in altri percorsi;
  4. Reimposta la maschera di autorizzazione del file: la funzione umask() impedisce alle parole della maschera di creazione di file ereditate di negare determinate autorizzazioni per aumentare la flessibilità del processo del demone;
  5. Chiudi il descrittore del file: il file aperto ereditato non verrà utilizzato, il che spreca risorse di sistema e non può essere disinstallato;
  6. Inizia a eseguire il lavoro principale del demone;
  7. Elaborazione dell'uscita del demone.

2.2 Modello di codice

#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

Quando esegui questo programma, diventa un processo demone e non è più associato al terminale corrente. Non puoi vederlo con il comando ps È necessario eseguire il comando ps con il parametro x per vederlo. Inoltre, puoi anche vedere che la chiusura della finestra del terminale o il logout non influiranno sull'esecuzione del demone.

3. Ruolo del processo demone

Perché il processo daemon deve essere separato dal terminale di controllo?

Il motivo per cui è separato dal terminale è quello di evitare che il processo venga interrotto dalle informazioni generate da qualsiasi terminale e le sue informazioni durante l'esecuzione non verranno visualizzate su nessun terminale.Poiché in Linux l'interfaccia attraverso la quale ogni sistema comunica con gli utenti è chiamata terminale, ogni processo che inizia ad essere eseguito da questo terminale si baserà su
Collegato a questo terminale, questo terminale è chiamato terminale di controllo di questi processi. Quando il terminale di controllo è chiuso, i processi corrispondenti si chiuderanno automaticamente. Tuttavia, molte delle nostre applicazioni non vogliono uscire dal processo senza disattivare gli interrupt, come database, servizi web, servizi di gioco, ecc. In questo momento, dobbiamo utilizzare processi demone.

4. Riepilogo

Questo articolo introduce il concetto di processo daemon, i passaggi di programmazione del processo daemon, l'implementazione del codice e il ruolo del processo daemon. Aiutaci a comprendere i principi di funzionamento dei programmi in background, ecc.