प्रौद्योगिकी साझेदारी

एण्ड्रॉयड् सी श्रृङ्खला: लिनक्स डेमन

2024-07-12

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

1. अवधारणा

Daemon (elf) प्रक्रिया Linux इत्यस्मिन् पृष्ठभूमिसेवाप्रक्रिया अस्ति एषा प्रायः नियन्त्रणटर्मिनलतः स्वतन्त्रा भवति तथा च समये समये कतिपयानि कार्याणि करोति अथवा कतिपयानां घटनानां प्रतीक्षां करोति ।

2. आदर्शः

२.१ डेमन् प्रोग्रामिंग् चरणाः

  1. बालप्रक्रिया रचयन्तु, मातापितृप्रक्रिया निर्गच्छति, बालप्रक्रियायां सर्वं कार्यं क्रियते: नियन्त्रणटर्मिनलात् औपचारिकरूपेण पृथक्;
  2. बालप्रक्रियायां नूतनं सत्रं setsid() कार्यं रचयन्तु, बालप्रक्रियायाः पूर्णतया स्वतन्त्रं नियन्त्रणात् बहिः च कृत्वा;
  3. वर्तमाननिर्देशिकां मूलनिर्देशिकायां परिवर्तयन्तु chdir()कार्यं: अमाउण्टेबल सञ्चिकातन्त्रस्य कब्जां निवारयितुं, भवान् अन्यमार्गेषु अपि परिवर्तयितुं शक्नोति;
  4. सञ्चिका-अनुमति-मास्कं पुनः सेट् कुर्वन्तु: umask() फंक्शन् वंशानुगत-सञ्चिका-निर्माण-मास्कं डेमन-प्रक्रियायाः लचीलतां वर्धयितुं कतिपयान् अनुमतिं नकारयितुं निवारयति;
  5. सञ्चिकावर्णकं पिधाय: वंशानुगतं मुक्तसञ्चिका न उपयुज्यते, यत् प्रणालीसंसाधनं अपव्ययति, विस्थापयितुं न शक्यते;
  6. डेमन् प्रक्रियायाः मूलकार्यं निष्पादयितुं आरभत;
  7. डेमन निर्गमनप्रक्रिया।

२.२ संहिताप्रतिरूपम्

#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

यदा भवान् एतत् प्रोग्राम् चालयति तदा एतत् डेमन् प्रक्रिया भवति, वर्तमान टर्मिनल् इत्यनेन सह सम्बद्धं नास्ति । भवन्तः ps आदेशेन तत् द्रष्टुं न शक्नुवन्ति । तदतिरिक्तं भवन्तः द्रष्टुं शक्नुवन्ति यत् टर्मिनल् विण्डो पिधाय वा लॉग आउट् करणेन वा डेमन् इत्यस्य चालनं न प्रभावितं भविष्यति ।

3. डेमन प्रक्रियायाः भूमिका

किमर्थं डेमन् प्रक्रियां नियन्त्रकटर्मिनलतः पृथक् कर्तुं आवश्यकम्?

अस्य टर्मिनल्-तः पृथक्त्वस्य कारणं यत् कस्यापि टर्मिनल्-जनित-सूचनायाः प्रक्रियायाः बाधा न भवेत्, निष्पादन-काले तस्य सूचना कस्मिन् अपि टर्मिनल्-मध्ये न प्रदर्शिता भविष्यतियतो हि Linux इत्यस्मिन् प्रत्येकं प्रणाली यस्य अन्तरफलकस्य माध्यमेन उपयोक्तृभिः सह संवादं करोति तत् टर्मिनल् इति उच्यते, अतः अस्मात् टर्मिनल् तः चालयितुं आरभमाणा प्रत्येका प्रक्रिया अवलम्बते
अस्मिन् टर्मिनले संलग्नं एतत् टर्मिनल् एतेषां प्रक्रियाणां नियन्त्रणटर्मिनल् इति उच्यते यदा नियन्त्रणटर्मिनल् बन्दं भवति तदा तत्सम्बद्धाः प्रक्रियाः स्वयमेव बन्दाः भविष्यन्ति । परन्तु अस्माकं बहवः अनुप्रयोगाः व्यत्ययान् निष्क्रियं विना प्रक्रियातः निर्गन्तुं न इच्छन्ति, यथा दत्तांशकोशाः, जालसेवाः, क्रीडासेवाः इत्यादयः अस्मिन् समये अस्माभिः डेमन् प्रक्रियायाः उपयोगः आवश्यकः

4. सारांशः

अस्मिन् लेखे डेमन् प्रक्रियायाः अवधारणा, डेमन् प्रक्रियायाः प्रोग्रामिंग-पदार्थाः, कोड-कार्यन्वयनं, डेमन-प्रक्रियायाः भूमिका च परिचयः कृतः अस्ति । पृष्ठभूमिकार्यक्रमानाम् इत्यादीनां संचालनसिद्धान्तान् अवगन्तुं अस्मान् साहाय्यं कुर्वन्तु।