Teknologian jakaminen

Android C -sarja: Linux Daemon

2024-07-12

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

1. Konsepti

Daemon (elf) -prosessi on taustapalveluprosessi Linuxissa. Se on yleensä riippumaton ohjauspäätteestä ja suorittaa tiettyjä tehtäviä tai odottaa tiettyjen tapahtumien tapahtumista.

2. Malli

2.1 Daemon-ohjelmoinnin vaiheet

  1. Luo aliprosessi, pääprosessi poistuu ja kaikki työ suoritetaan aliprosessissa: erotettu muodollisesti ohjaavasta päätteestä;
  2. Luo uusi istunto setsid() -funktio aliprosessiin, jolloin aliprosessista tulee täysin itsenäinen ja hallitsematon;
  3. Vaihda nykyinen hakemisto juurihakemistoon chdir()Toiminto: Voit estää liittämättömän tiedostojärjestelmän varaamisen muuttamalla sen myös muille poluille;
  4. Palauta tiedoston käyttöoikeusmaski: umask()-funktio estää perittyjä tiedostojen luontimaskin sanoja kieltämästä tiettyjä oikeuksia demonprosessin joustavuuden lisäämiseksi;
  5. Sulje tiedostokuvaaja: perittyä avointa tiedostoa ei käytetä, mikä tuhlaa järjestelmäresursseja eikä sitä voida poistaa.
  6. Aloita demonin ydintyön suorittaminen;
  7. Daemonin poistumiskäsittely.

2.2 Koodimalli

#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

Kun suoritat tämän ohjelman, siitä tulee demoniprosessi, eikä sitä enää liitetä nykyiseen päätteeseen. Et näe sitä ps-komennolla Sinun on suoritettava ps-komento x-parametrilla nähdäksesi sen. Lisäksi voit myös nähdä, että pääteikkunan sulkeminen tai uloskirjautuminen ei vaikuta demonin toimintaan.

3. Demoniprosessin rooli

Miksi demoniprosessi pitää erottaa ohjaavasta päätteestä?

Syy siihen, miksi se on erotettu päätteestä, on estää prosessia keskeyttämästä minkä tahansa päätelaitteen tuottamaa tietoa, ja sen tiedot suorituksen aikana eivät näy missään päätelaitteessa.Koska Linuxissa käyttöliittymää, jonka kautta jokainen järjestelmä kommunikoi käyttäjien kanssa, kutsutaan terminaaliksi, jokainen tästä päätteestä käynnistyvä prosessi perustuu
Tähän päätteeseen liitettynä tätä päätettä kutsutaan näiden prosessien ohjauspäätteeksi. Kun ohjauspääte suljetaan, vastaavat prosessit sulkeutuvat automaattisesti. Monet sovelluksemme eivät kuitenkaan halua poistua prosessista sammuttamatta keskeytyksiä, kuten tietokantoja, verkkopalveluita, pelipalveluita jne. Tällä hetkellä meidän on käytettävä demoniprosesseja.

4. Yhteenveto

Tämä artikkeli esittelee demoniprosessin käsitteen, demoniprosessin ohjelmointivaiheet, koodin toteutuksen ja demoniprosessin roolin. Auta meitä ymmärtämään taustaohjelmien toimintaperiaatteet jne.