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

उच्च समवर्ती रिएक्टर सर्वर [मध्यम] ।

2024-07-12

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

उच्च समवर्ती रिएक्टर सर्वर [मध्यम] ।

4. प्रक्रियानियन्त्रणं प्रक्रियासमन्वयनं च

1. संकेतः

१.१ संकेतानां मूलभूतसंकल्पनाः

सिग्नल् (signal) इति सॉफ्टवेयर-व्यत्ययम् अस्ति यत् प्रक्रियाणां मध्ये सन्देशानां प्रसारणस्य एकः विधिः अस्ति, परन्तु एतत् प्रक्रियां प्रति किमपि दत्तांशं प्रसारयितुं न शक्नोति ।

संकेताः उत्पद्यन्ते इति अनेके कारणानि सन्ति Shell इत्यस्मिन् भवन्तः उपयोक्तुं शक्नुवन्तिkillतथाkillallसंकेतं प्रेषयितुं आदेशः : १.

kill -信号的类型 进程编号
killall -信号的类型 进程名
  • 1
  • 2

१.२ संकेतानां प्रकाराः

संकेतनामसंकेत मूल्यपूर्वनिर्धारित संसाधन क्रियासंकेतस्य कारणम्
सिघुप्1एकःटर्मिनल् लम्बते अथवा नियन्त्रणप्रक्रिया समाप्तं भवति
SIGINT इति2एकःकीबोर्ड व्यत्यय Ctrl+c
SIGQUIT इति3कीबोर्डस्य escape कीलं नुद्यते
सिगिल्4अवैध निर्देश
सिग्ट्रैप्5breakpoint निर्देशाः
सिगाबर्ट6abort(3) द्वारा निर्गतं गर्भपातसंकेतम् ।
सिग्बुस्7बस त्रुटिः
सिगफपे8प्लवकबिन्दु अपवादः
सिग्किल्9एकःkill -9 प्रक्रियां हन्ति, एषः संकेतः गृहीतुं उपेक्षितुं च न शक्यते
सिगुसर१10एकःउपयोक्तृ परिभाषित संकेत 1
सिगसेगव11अमान्यस्मृतिसन्दर्भः (सीमातः बहिः सरणी, शून्यसूचकसञ्चालनम्)
सिगुस्र२12एकःउपयोक्तृ परिभाषित संकेत 2
SIGPIPE इति13एकःपठनप्रक्रिया विना पाइप् मध्ये दत्तांशं लिखन्तु
सिगलर्म्14एकःअलार्म घड़ी संकेत, अलार्म() कार्य द्वारा प्रेषित संकेत
SIGTERM इति15एकःसमाप्तिसंकेतः, पूर्वनिर्धारितरूपेण प्रेषितः संकेतः
SIGSTKFLT16एकःस्तम्भदोषः
SIGCHLD17बालप्रक्रिया समाप्ते सति उत्सर्ज्यते
SIGCONT इति18स्थगितप्रक्रियाम् पुनः आरभत
SIGSTOP19प्रक्रियां स्थगयन्तु
SIGTSTP20टर्मिनल् स्टॉप कीलं नुदन्तु
सिग्तिन्21पृष्ठभूमिप्रक्रिया टर्मिनल् पठितुं अनुरोधं करोति
सिग्ट्टौ22पृष्ठभूमिप्रक्रिया टर्मिनल् मध्ये लिखितुं अनुरोधं करोति
सिगुर्ग23आपत्कालीन स्थितिपरिचयः (सॉकेट्) २.
SIGXCPU24CPU समयसीमा अतिक्रान्तवती
SIGXFSZ25सञ्चिकायाः ​​आकारस्य सीमा अतिक्रान्तवती
सिग्वताल्र्म26एकःआभासी घड़ी संकेत
सिगप्रोफ27एकःघड़ीसंकेतानां विश्लेषणं कुर्वन्तु
SIGWINCH इति28विण्डो आकारः परिवर्तते
SIGPOLL29मतदान (Sys V) ९.
SIGPWR30एकःविद्युत् विफलता
सिग्सीस्31अवैध व्यवस्था आह्वान

A इत्यस्य पूर्वनिर्धारितं कार्यं प्रक्रियां समाप्तुं भवति ।

B इत्यस्य पूर्वनिर्धारितक्रिया अस्य संकेतस्य अवहेलना अस्ति ।

C इत्यस्य पूर्वनिर्धारितक्रिया प्रक्रियां समाप्तं कृत्वा कर्नेल् इमेज डम्प् कर्तुं भवति ।

D इत्यस्य पूर्वनिर्धारितक्रिया प्रक्रियां स्थगयितुं भवति, तथा च यः कार्यक्रमः स्थगितस्थितौ प्रविशति सः निरन्तरं निष्पादयितुं शक्नोति ।

१.३ संकेतसंसाधनम्

प्रक्रियाणां संकेतानां नियन्त्रणस्य त्रयः उपायाः सन्ति- १.

  1. अस्य संकेतस्य नियन्त्रणार्थं प्रणाल्याः पूर्वनिर्धारितक्रियायाः उपयोगः भवति ।
  2. व्यत्ययप्रक्रियाकरणकार्यं सेट् कुर्वन्तु संकेतं प्राप्त्वा कार्यं तत् सम्पादयिष्यति ।
  3. संकेतं उपेक्ष्य संकेतेन सह किमपि न कुर्वन्तु यथा कदापि न घटितम्।

signal()कार्याणि कार्यक्रमः संकेतान् कथं नियन्त्रयति इति सेट् कर्तुं शक्नुवन्ति ।

कार्यघोषणा : १.

#include <signal.h>

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
  • 1
  • 2
  • 3
  • 4

पैरामीटर् विवरणम् : १.

  • sig:ग्रहणार्थं संकेतं निर्दिशन्तु।
  • func : संकेतसंसाधनकार्यं प्रति सूचकः। प्रसंस्करणकार्यं पूर्णाङ्कमापदण्डं प्राप्तुं आवश्यकं भवति, यत् गृहीतसंकेतसङ्ख्या अस्ति ।
  1. SIG_DFL :SIG_DFL मैक्रो पूर्वनिर्धारितसंकेतसंसाधनविधिं प्रतिनिधियति ।उपयुञ्जताम्‌SIG_DFLयथाsignalफंक्शन् इत्यस्य द्वितीयः पैरामीटर् सूचयति यत् संकेतस्य कृते सिस्टम् डिफॉल्ट् प्रोसेसिङ्ग् मेथड् उपयुज्यते ।
  2. SIG_IGN :SIG_IGN मैक्रो इत्यस्य अर्थः संकेतस्य अवहेलना भवति ।उपयुञ्जताम्‌SIG_IGNयथाsignal कार्यस्य द्वितीयः पैरामीटर् सूचयति यत् यदा प्रक्रिया संकेतं प्राप्नोति तदा सा तस्य अवहेलनां करिष्यति, किमपि प्रक्रियां न करिष्यति । एतेन कतिपयेषु परिस्थितिषु प्रक्रियाणां अप्रत्याशितरूपेण समाप्तिः वा बाधा वा न भवति ।
  3. SIG_ERR:SIG_ERR दोषान् सूचयितुं मैक्रोस् उपयुज्यन्ते ।न यथाsignalफंक्शन् इत्यस्य द्वितीयः पैरामीटर् इत्यस्य स्थाने यथा भवतिsignal फंक्शन् इत्यस्य रिटर्न् वैल्यू सूचयति यत् आह्वानं विफलम् अभवत् ।यदिsignalयदि फंक्शन् इत्यस्य आह्वानं विफलं भवति तर्हि तत् पुनः आगमिष्यतिSIG_ERR .एतत् सामान्यतया अन्वेषणाय, प्रक्रियायै च उपयुज्यतेsignalफंक्शन् कॉल् इत्यस्मिन् त्रुटिः।

छवि-20240709113614147

छवि-20240709113230874

छवि-20240709113240944

१.४ संकेतानां किं प्रयोजनम् ?

सेवाकार्यक्रमः पृष्ठभूमितः चाल्यते यदि भवान् तत् निवारयितुम् इच्छति तर्हि तस्य वधः सद्विचारः नास्ति, यतः यदा प्रक्रिया मारिता भवति तदा सा सहसा म्रियते, तदनन्तरं कार्यं न व्यवस्थाप्यते

यदि भवान् सेवाकार्यक्रमाय संकेतं प्रेषयति तर्हि संकेतं प्राप्त्वा सेवाकार्यक्रमः एकं कार्यं आह्वयति, कार्ये पश्चात्तापसङ्केतं च लिखति, कार्यक्रमः योजनाबद्धरीत्या निर्गन्तुं शक्नोति

सेवाकार्यक्रमाय 0 इत्यस्य संकेतं प्रेषयित्वा कार्यक्रमः जीवितः अस्ति वा इति ज्ञातुं शक्यते ।

छवि-20240709135336848

१.५ संकेतानां प्रेषणम्

Linux प्रचालनतन्त्रं प्रदाति kill तथाkillall आदेशः कार्यक्रमाय संकेतं प्रेषयतिkill() पुस्तकालयस्य कार्याणि अन्यप्रक्रियाभ्यः संकेतान् प्रेषयन्ति ।

कार्यघोषणा : १.

int kill(pid_t pid, int sig);
  • 1

kill() फंक्शन् पैरामीटर्स् गृह्णातिsig निर्दिष्टः संकेतः पैरामीटर् प्रति प्रसारितः भवतिpid निर्दिष्टा प्रक्रिया।

पैरामीटर् pid अनेकाः परिस्थितयः सन्ति- १.

  1. pid > 0 संकेतं प्रक्रियां प्रति यथाpid प्रक्रिया।
  2. pid = 0 वर्तमानप्रक्रियायाः समाने प्रक्रियासमूहे संकेतं प्रसारयन्तु प्रायः मातापितृप्रक्रियाद्वारा बालप्रक्रियायाः संकेतान् प्रेषयितुं भवति
  3. pid < -1 संकेतं प्रक्रियासमूहस्य ID मध्ये पारयन्तु|pid| सर्वेषां प्रक्रियाणां ।
  4. pid = -1 संकेतं सर्वेभ्यः प्रक्रियाभ्यः प्रसारयति येषां संकेतं प्रेषयितुं अनुमतिः अस्ति, परन्तु संकेतं प्रेषितवती प्रक्रिया न ।

2. प्रक्रिया समाप्तिः

प्रक्रियायाः समाप्तेः ८ उपायाः सन्ति, येषु ५ सामान्यसमाप्तिः सन्ति, ते सन्ति :

  1. अस्ति main() कार्याणां कृतेreturn निर्वतनम्;
  2. कस्मिन् अपि फंक्शन् मध्ये आहूतः exit() नियोग;
  3. कस्मिन् अपि फंक्शन् मध्ये आहूतः _exit() वा_Exit() नियोग;
  4. अन्तिमः थ्रेड् स्वस्य स्टार्टअप रूटीन (thread main function) इत्यस्मात् आरभ्यते return निर्वतनम्;
  5. अन्तिमसूत्रे आहूतः pthread_exit() निर्वतनम्;

असामान्यतया समाप्त्यर्थं त्रयः उपायाः सन्ति, ते सन्ति- १.

  1. स्थानांतरण abort() function abort;
  2. एकः संकेतः प्राप्यते;
  3. अन्तिमः सूत्रः रद्दीकरण-अनुरोधस्य प्रतिक्रियां ददाति ।

२.१ प्रक्रियासमाप्तेः स्थितिः

अस्ति main() कार्ये, २.return प्रत्यागतं मूल्यं समाप्तिस्थितिः अस्ति, यदि नreturn कथनं वा आह्वानं वाexit(), तर्हि प्रक्रियायाः समाप्तिस्थितिः 0 भवति ।

शेल् मध्ये प्रक्रियासमाप्तेः स्थितिं पश्यन्तु :

echo $?
  • 1

प्रक्रियां सामान्यतया समाप्तुं ३ कार्याणि (exit() तथा_Exit() ISO C, 2019 द्वारा निर्दिष्टम् अस्ति ।_exit() POSIX द्वारा निर्दिष्टम् अस्ति):

void exit(int status);
void _exit(int status);
void _Exit(int status);
  • 1
  • 2
  • 3

status प्रक्रियासमाप्तेः स्थितिः ।

छवि-20240709143530327

छवि-20240709143615950

२.२ संसाधनविमोचनविषयः

  • return यदा फंक्शन् प्रत्यागच्छति तदा स्थानीयवस्तुनः विध्वंसकः आह्वयते इति सूचयति ।main() कार्येreturn वैश्विकवस्तुनाशकः अपि उच्यते ।
  • exit() प्रक्रियां समाप्तुं सूचयति, स्थानीयवस्तुनः विध्वंसकः न आह्वयते, केवलं वैश्विकवस्तुनः विध्वंसकः आह्वयते ।
  • _exit() तथा_Exit() प्रत्यक्षतया निर्गच्छन्तु, सफाईकार्यं न भविष्यति।

२.३ प्रक्रियायाः समाप्तिकार्यम्

प्रक्रिया उपलब्धा अस्ति atexit() कार्यपञ्जीकरणं कार्याणि समाप्तं करोति (३२ पर्यन्तं), एते कार्याणि भविष्यन्तिexit() स्वयमेव आह्वयति।

int atexit(void (*function)(void));
  • 1

exit() समाप्तिकार्याणि यस्मिन् क्रमेण आह्वयन्ति सः पञ्जीकरणसमयात् विपर्यस्तः भवति ।

छवि-20240709143824286

छवि-20240709143830549

3. एक्जीक्यूटिव प्रोग्राम् आह्वयन्तु

३.१ प्रणाली() कार्यम्

system()फंक्शन् प्रोग्राम् निष्पादयितुं सरलं विधिं प्रदाति, प्रोग्राम् तथा च पैरामीटर्स् पारयति यत् स्ट्रिंग् रूपेण निष्पादयितुं आवश्यकम् अस्ति ।system()केवलं कार्यम्।

कार्यघोषणा : १.

int system(const char * string);
  • 1

system()फंक्शन् इत्यस्य रिटर्न् वैल्यू अधिकं कष्टप्रदम् अस्ति ।

  1. यदि निष्पादितः कार्यक्रमः नास्ति तर्हिsystem()फंक्शन् अशून्यं प्रत्यागच्छति;
  2. यदि प्रोग्रामस्य निष्पादनं सफलं भवति तथा च निष्पादितस्य प्रोग्रामस्य निष्पादनस्थितिः 0 अस्ति, तर्हि ।system()फंक्शन् 0 प्रत्यागच्छति;
  3. यदि कार्यक्रमस्य निष्पादनं सफलं भवति तथा च निष्पादितस्य कार्यक्रमस्य समाप्तिस्थितिः 0 नास्ति तर्हि ।system()फंक्शन् अशून्यं प्रत्यागच्छति ।

३.२ exec function family इति

execफंक्शन् परिवाराः प्रक्रियायाः अन्तः प्रोग्राम् (बाइनरी अथवा शेल् स्क्रिप्ट्) आह्वयितुं अन्यं मार्गं प्रददति ।

execफंक्शन् परिवारः यथा घोषितः अस्ति ।

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

सूचना

  1. यदि कार्यक्रमस्य निष्पादनं विफलं भवति तर्हि -1 प्रत्यक्षतया प्रत्यागच्छति, विफलतायाः कारणं च अत्र संगृह्यतेerrnoमध्यं।
  2. नूतनप्रक्रियायाः प्रक्रियासङ्ख्या मूलप्रक्रियायाः समाना एव भवति, परन्तु नूतनप्रक्रिया मूलप्रक्रियायाः कोडखण्डस्य, दत्तांशखण्डस्य, स्तम्भस्य च स्थाने भवति
  3. यदि निष्पादनं सफलं भवति तर्हि मुख्यकार्यक्रमे सफलतया आह्वानं कृत्वा कार्यं न प्रत्यागमिष्यतिexecतदनन्तरं आह्वानककार्यक्रमस्य स्थाने आहूतः कार्यक्रमः आगमिष्यति अर्थात्execफंक्शन् इत्यस्य अनन्तरं कोऽपि कोड् निष्पादितः न भविष्यति ।
  4. वास्तविकविकासे सर्वाधिकं प्रयुक्तं भवतिexecl()तथाexecv(), अन्ये दुर्लभाः प्रयुज्यन्ते ।

4. प्रक्रियां रचयन्तु

४.१ लिनक्स ०, १, २ च प्रक्रियां करोति

सम्पूर्णे Linux प्रणाल्यां सर्वाणि प्रक्रियाः वृक्षसंरचने सन्ति ।

  • **प्रक्रिया क्रमाङ्कः ० (प्रणालीप्रक्रिया)** सर्वेषां प्रक्रियाणां पूर्वजः अस्ति तया प्रक्रियाक्रमाङ्कः १, क्रमाङ्कः २ च निर्मिताः ।
  • **प्रक्रिया क्रमाङ्कः १ (systemd)** कर्नेल् आरम्भीकरणं प्रणालीविन्यासं च कर्तुं उत्तरदायी अस्ति ।
  • **प्रक्रिया क्रमाङ्कः २ (kthreadd)** सर्वेषां कर्नेल् थ्रेड्-समूहानां समयनिर्धारणस्य प्रबन्धनस्य च उत्तरदायी अस्ति ।

उपयुञ्जताम्‌pstreeभवान् प्रक्रियावृक्षं आदेशेन द्रष्टुं शक्नोति :

pstree -p 进程编号
  • 1

४.२ प्रक्रियापरिचयः

प्रत्येकं प्रक्रियायाः एकः अद्वितीयः प्रक्रिया-ID भवति यस्य प्रतिनिधित्वं अ-ऋणात्मक-पूर्णाङ्केन भवति । यद्यपि अद्वितीयं तथापि प्रक्रिया-ID पुनः उपयोक्तुं शक्यते । यदा प्रक्रिया समाप्तं भवति तदा तस्याः प्रक्रिया-ID पुनः उपयोगाय अभ्यर्थी भवति । Linux विलम्बितपुनःप्रयोगस्य एल्गोरिदम् इत्यस्य उपयोगं करोति येन नवनिर्मितप्रक्रियायाः ID सद्यः समाप्तप्रक्रियायाः उपयोगात् ID इत्यस्मात् भिन्नः भवति । एतेन नूतनाः प्रक्रियाः समान ID इत्यस्य उपयोगेन समाप्तप्रक्रिया इति भ्रान्त्या न भवन्ति ।

प्रक्रिया ID प्राप्तुं कार्यं:

pid_t getpid(void);    // 获取当前进程的ID。
pid_t getppid(void);   // 获取父进程的ID。
  • 1
  • 2

४.३ fork() फंक्शन्

विद्यमानप्रक्रिया आह्वानं कर्तुं शक्नोतिfork()फंक्शन् नूतनं प्रक्रियां निर्माति।

कार्यघोषणा : १.

pid_t fork(void);
  • 1

आश्रित्यfork()निर्मिता नूतना प्रक्रिया बालप्रक्रिया इति कथ्यते ।

fork() फंक्शन् एकवारं आह्वयति परन्तु द्विवारं प्रत्यागच्छति । द्वयोः रिटर्न्-योः मध्ये अन्तरं अस्ति यत् बाल-प्रक्रियायाः रिटर्न्-मूल्यं 0 भवति, यदा तु मातापितृ-प्रक्रियायाः रिटर्न्-मूल्यं नवनिर्मित-बाल-प्रक्रियायाः प्रक्रिया-ID भवति

बालप्रक्रिया मातापितृप्रक्रिया च निरन्तरं निष्पादयन्तिfork()तदनन्तरं सङ्केतः, २. बालप्रक्रिया मातापितृप्रक्रियायाः प्रतिलिपिः अस्ति । बालप्रक्रियायाः मातापितृप्रक्रियायाः दत्तांशस्थानस्य, ढेरस्य, ढेरस्य च प्रतिलिपिः भवति (टिप्पणी: बालप्रक्रियायाः प्रतिलिपिः अस्ति, मातापितृप्रक्रियायाः सह साझा न भवति) ।

fork()तदनन्तरं मातापितृसन्ततिप्रक्रियाणां निष्पादनक्रमः अनिर्धारितः भवति ।

छवि-20240709221535371

छवि-20240709221546617

४.४ हंसस्य() प्रयोगद्वयम् ।

  1. मातापितृप्रक्रिया स्वयमेव प्रतिलिपिं कर्तुम् इच्छति, ततः मातापितृप्रक्रिया बालप्रक्रिया च प्रत्येकं भिन्नं कोडं निष्पादयति ।संजालसेवाकार्यक्रमेषु एषः उपयोगः अतीव सामान्यः भवति यदा अनुरोधः आगच्छति तदा मातापितृप्रक्रिया आह्वानं करोतिfork(), बालप्रक्रिया एतान् अनुरोधानपि सम्पादयतु, मातापितृप्रक्रिया अग्रिमसंयोजनानुरोधस्य प्रतीक्षां निरन्तरं कुर्वती अस्ति ।
  2. प्रक्रिया अन्यं कार्यक्रमं निष्पादयितुम् इच्छति ।एषः उपयोगः शेल्-मध्ये अतीव सामान्यः अस्ति, बाल-प्रक्रिया ततः आरभ्यतेfork()पुनरागमनस्य तत्क्षणमेव आहूतःexec

४.५ साझासञ्चिकाः

fork()एकं विशेषता अस्ति यत् मातापितृप्रक्रियायां उद्घाटिताः सञ्चिकावर्णकाः बालप्रक्रियायां प्रतिलिपिताः भविष्यन्ति, मातापितृप्रक्रिया बालप्रक्रिया च समानसञ्चिकाविक्षेपं साझां कुर्वन्ति

यदि मातापितृप्रक्रिया बालप्रक्रिया च समानवर्णकेन सूचितसञ्चिकायां किमपि रूपेण समन्वयनं विना लिखन्ति तर्हि तेषां उत्पादनं परस्परं मिश्रितं भवितुम् अर्हति

छवि-20240709222929369

छवि-20240709222803641

अस्मिन् क्षणे भवन्तः द्रष्टुं शक्नुवन्ति यत् केवलं एकलक्षपङ्क्तयः दत्तांशाः सन्ति ।

छवि-20240709222853769

छवि-20240709223236254

अस्मिन् समये दत्तांशस्य २,००,००० पङ्क्तिः भवितुमर्हति यतोहि सञ्चिकालेखनक्रिया परमाणुः नास्ति । लेखनस्य विफलतां जनयति ।

४.६ vfork() फंक्शन्

vfork()फंक्शन् कॉल्स् तथा रिटर्न् वैल्यूस् इत्येतयोः समानम् अस्तिfork()समानं, परन्तु तेषां शब्दार्थाः भिन्नाः सन्ति।

vfork()कार्यस्य उपयोगः नूतनप्रक्रियायाः निर्माणार्थं भवति यस्याः उद्देश्यं भवतिexecएकः नूतनः कार्यक्रमः यः मातापितृप्रक्रियायाः पतास्थानं प्रतिलिपिं न करोति यतः बालप्रक्रिया तत्क्षणमेव आह्वयतिexec , अतः मातापितृप्रक्रियायाः पतास्थानस्य उपयोगः न भविष्यति । यदि बालप्रक्रिया मातापितृप्रक्रियायाः पतास्थानस्य उपयोगं करोति तर्हि अज्ञातपरिणामाः भवितुम् अर्हन्ति ।

vfork()तथाfork()अन्यः भेदः अस्ति : १.vfork()बालप्रक्रिया प्रथमं चालयति इति सुनिश्चितं कुर्वन्तु बालप्रक्रियायां च आह्वयन्तुexecवाexitततः मातापितृप्रक्रिया पुनः कार्यं आरभते ।

5. ज़ॉम्बी प्रक्रिया

प्रचालनतन्त्रे ज़ॉम्बी प्रक्रिया बालप्रक्रियाम् निर्दिशति या समाप्तवती परन्तु तस्याः मातापितृप्रक्रिया अद्यापि तस्याः निर्गमनस्थितिं न पठितवती । यद्यपि ज़ॉम्बी प्रक्रिया इदानीं न प्रचलति तथापि प्रक्रियासारणीयां प्रविष्टिं गृह्णाति येन कर्नेल् प्रक्रियायाः निर्गमनस्थितिसूचनाम् (यथा प्रक्रिया ID, निर्गमनस्थितिः इत्यादीनि) रक्षितुं शक्नोति यावत् मातापितृप्रक्रिया एतां सूचनां न पठति

५.१ ज़ॉम्बी प्रक्रियाणां कारणानि

यदि मातापितृप्रक्रिया बालप्रक्रियायाः पूर्वं निर्गच्छति तर्हि बालप्रक्रिया प्रक्रिया १ द्वारा आतिथ्यं भविष्यति (एषः अपि प्रक्रियां पृष्ठभूमितः चालयितुं मार्गः अस्ति) ।

यदि बालप्रक्रिया मातापितृप्रक्रियायाः पूर्वं निर्गच्छति, मातापितृप्रक्रिया च बालप्रक्रियायाः निर्गमनसूचना न संसाधयति, तर्हि बालप्रक्रिया ज़ॉम्बीप्रक्रिया भविष्यति

५.२ ज़ॉम्बी प्रक्रियाणां हानिः

कर्नेल् प्रत्येकस्य बालप्रक्रियायाः कृते एकं दत्तांशसंरचनां धारयति, यत्र प्रक्रियासङ्ख्या, समाप्तिस्थितिः, प्रयुक्तः CPU समयः इत्यादयः सन्ति । यदि मातापितृप्रक्रिया बालप्रक्रियायाः निर्गमनसूचनाः संसाधयति तर्हि कर्नेल् एतां दत्तांशसंरचनां मुक्तं करिष्यति । यदि मातापितृप्रक्रिया बालप्रक्रियायाः निर्गमनसूचना न संसाधयति तर्हि कर्नेल् एतां दत्तांशसंरचनां न मुञ्चति, बालप्रक्रियायाः प्रक्रियासङ्ख्या च सर्वदा व्याप्ता भविष्यति प्रणाल्यां उपलब्धाः प्रक्रियासङ्ख्याः सीमिताः सन्ति यदि बहूनां ज़ॉम्बी प्रक्रियाः उत्पद्यन्ते तर्हि प्रणाली नूतनाः प्रक्रियाः जनयितुं न शक्नोति यतोहि प्रक्रियासङ्ख्याः उपलब्धाः नास्ति

५.३ ज़ॉम्बी प्रक्रियां परिहरितुं पद्धतयः

  1. SIGCHLD संकेतं नियन्त्रयति : यदा बालप्रक्रिया निर्गच्छति तदा कर्नेल् SIGCHLD संकेतं मातापितृप्रक्रियायाः कृते प्रेषयिष्यति ।यदि मातापितृप्रक्रिया उपयुज्यतेsignal(SIGCHLD, SIG_IGN)बालप्रक्रियायाः निर्गमने तस्य रुचिः नास्ति इति कर्नेल् सूचयन्तु, बालप्रक्रियायाः निर्गमनस्य अनन्तरं तत्क्षणमेव तस्य दत्तांशसंरचना मुक्ता भविष्यति
  2. उपयुञ्जताम्‌wait()/waitpid()नियोग: मातापितृप्रक्रिया एतानि कार्याणि आह्वयन् बालप्रक्रियायाः समाप्तिम् प्रतीक्षते तस्याः निर्गमनस्थितिं च प्राप्नोति, तस्मात् बालप्रक्रियायाः कब्जितसम्पदां मुक्तं भवति
pid_t wait(int *stat_loc); 
pid_t waitpid(pid_t pid, int *stat_loc, int options); 
pid_t wait3(int *status, int options, struct rusage *rusage); 
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
  • 1
  • 2
  • 3
  • 4

रिटर्न् वैल्यू बालप्रक्रियायाः संख्या अस्ति ।

stat_loc बालप्रक्रियायाः समाप्तेः विषये सूचना अस्ति वा : १.

क) यदि सामान्यतया समाप्तं भवति तर्हि मैक्रो WIFEXITED(stat_loc) सत्यं प्रत्यागच्छतु, मैक्रोWEXITSTATUS(stat_loc) समाप्तिस्थितिः प्राप्तुं शक्यते;

ख) यदि असामान्यरूपेण समाप्तं भवति तर्हि स्थूलः WTERMSIG(stat_loc) प्रक्रियां समाप्तुं संकेतं प्राप्नोति।

छवि-20240709230911352

छवि-20240709231034423

छवि-20240709231050581

छवि-20240709231124375

छवि-20240709231140813

यदि मातापितृप्रक्रिया व्यस्ता अस्ति तर्हि भवन्तः गृहीतुं शक्नुवन्ति SIGCHLD संकेतः, संकेतसंसाधनकार्य्ये आह्वयतिwait()/waitpid()

छवि-20240709231439475

छवि-20240709231422927

6.बहुविधाः प्रक्रियाः संकेताः च

[प्रक्रियाणां मध्ये संकेतान् प्रेषयन्तु](##1.5 संकेतान् प्रेषयन्तु)

बहुप्रक्रियासेवाकार्यक्रमे यदि उपप्रक्रिया निर्गमनसंकेतं प्राप्नोति तर्हि उपप्रक्रिया स्वयमेव निर्गमिष्यति ।

यदि मातापितृप्रक्रिया निर्गमनसंकेतं प्राप्नोति तर्हि सर्वेभ्यः बालप्रक्रियाभ्यः निर्गमनसंकेतान् प्रेषयेत् ततः स्वयमेव निर्गन्तुं अर्हति ।

छवि-20240711222919564

छवि-20240711222900141

छवि-20240711223111481

7. साझास्मृतिः

बहुसूत्राणि प्रक्रियायाः पतास्थानं साझां कुर्वन्ति,यदि बहुविधसूत्राणां समानस्मृतिम् अभिगन्तुं आवश्यकं भवति तर्हि केवलं वैश्विकचरानाम् उपयोगं कुर्वन्तु ।

बहुविधप्रक्रियासु प्रत्येकस्य प्रक्रियायाः पतास्थानं स्वतन्त्रं भवति, न तु साझीकृतम् ।यदि बहुविधप्रक्रियाणां समानस्मृतौ प्रवेशस्य आवश्यकता भवति तर्हि वैश्विकचरानाम् उपयोगः कर्तुं न शक्यते, केवलं साझास्मृतिः एव उपयोक्तुं शक्यते ।

साझास्मृतिः बहुविधप्रक्रियाणां (प्रक्रियाणां मध्ये रक्तसम्बन्धस्य आवश्यकता नास्ति) समानस्मृतिस्थानं प्राप्तुं शक्नोति । प्रक्रियाः साझास्मृतिं स्वस्य पतास्थानेन सह संयोजयितुं शक्नुवन्ति यदि एकः प्रक्रिया साझास्मृतौ दत्तांशं परिवर्तयति तर्हि अन्यप्रक्रियाभिः पठितदत्तांशः अपि परिवर्तते ।

साझास्मृतिः तालातन्त्रं न ददाति, अर्थात् यदा प्रक्रिया साझास्मृतिं पठति/लिखति तदा अन्यप्रक्रियाणां पठन/लेखनं न निवारयतियदि भवान् साझास्मृतेः पठनं/लेखनं ताडयितुम् इच्छति तर्हि सेमाफोर् इत्यस्य उपयोगं कर्तुं शक्नोति . Linux साझास्मृतेः संचालनाय कार्याणां समुच्चयं प्रदाति ।

७.१ श्मगेट् कार्यम्

एतत् कार्यं साझास्मृतिः निर्मातुं/प्राप्त्यर्थं उपयुज्यते ।

 int shmget(key_t key, size_t size, int shmflg);
  • 1
  • कुंजी साझीकृतस्मृतेः कीलमूल्यं पूर्णाङ्कः (typedef unsigned int key_t), सामान्यतया षट्दशमलये, उदाहरणार्थम् 0x5005, भिन्न-भिन्न-साझा-स्मृतीनां कीलानि समानानि न भवितुम् अर्हन्ति ।
  • आकृति साझास्मृतेः आकारः, बाइट्-मात्रायां ।
  • श्मफ्लग् साझीकृतस्मृतेः अभिगमानुमतिः सञ्चिकानां अनुमतिः इव एव भवति, उदाहरणार्थम्0666|IPC_CREAT यदि साझीकृतस्मृतिः नास्ति तर्हि तत् रचयतु इति सूचयति ।
  • return value: सफलतायां साझास्मृतेः (0 इत्यस्मात् अधिकः पूर्णाङ्कः) id, विफलतायां -1 (प्रणाल्याः अपर्याप्तस्मृतिः अस्ति तथा च अनुमतिः नास्ति) प्रत्यागच्छति ।

छवि-20240711224223200

छवि-20240711224212293

उपयुञ्जताम्‌ ipcs -m भवान् प्रणाल्याः साझास्मृतिं द्रष्टुं शक्नोति, यत्र सन्ति: कीलः, साझास्मृति-id (shmid), स्वामी, अनुमतिः (perms), आकारः (बाइट्) च ।

उपयुञ्जताम्‌ ipcrm -m 共享内存id साझास्मृतिः निम्नलिखितरूपेण स्वहस्तेन विलोपयितुं शक्यते ।

छवि-20240711225202860

नोटः- साझास्मृतौ दत्तांशप्रकारस्य कृते पात्रस्य उपयोगः कर्तुं न शक्यते, केवलं मूलभूतदत्तांशप्रकारस्य उपयोगः कर्तुं शक्यते ।

७.२ श्मत् कार्यम्

एतत् कार्यं वर्तमानप्रक्रियायाः पतास्थाने साझास्मृतिं संयोजयितुं उपयुज्यते ।

void *shmat(int shmid, const void *shmaddr, int shmflg);
  • 1
  • श्मिड आश्रित्यshmget() कार्येण प्रत्यागतः साझास्मृतिपरिचयः ।
  • श्मद्र् यत्र साझास्मृतिः वर्तमानप्रक्रियायाः सह सम्बद्धा अस्ति तत् पतास्थानं निर्दिशन्तु सामान्यतया 0 पूरयन्तु यत् प्रणाली साझास्मृतेः पतां चिनोतु ।
  • श्मफ्लग् ध्वजबिट्, प्रायः 0 इत्यनेन पूरितः ।

आह्वानं सफले सति साझास्मृतेः आरम्भसङ्केतं प्रत्यागच्छति, यदा च विफलं भवति तदा प्रत्यागच्छति । (void *)-1

७.३ श्मदत् कार्यम्

एतत् कार्यं वर्तमानप्रक्रियातः साझास्मृतिं विच्छेदयितुं उपयुज्यते, यत् तुल्यम् अस्ति shmat() कार्यस्य विलोमक्रिया ।

int shmdt(const void *shmaddr);
  • 1
  • श्मद्र् shmat() फंक्शन् द्वारा प्रत्यागतं पता ।

यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।

७.४ श्मक्त्ल् कार्यम्

एतत् कार्यं साझास्मृतेः संचालनाय सर्वाधिकं प्रयुक्तं कार्यं साझास्मृतिं विलोपयितुं भवति ।

int shmctl(int shmid, int command, struct shmid_ds *buf);
  • 1
  • श्मिड shmget() फंक्शन् द्वारा प्रत्यागतं साझास्मृति id ।
  • आदेश साझास्मृतेः संचालनस्य निर्देशाः यदि भवान् साझास्मृतिं विलोपयितुम् इच्छति तर्हि पूरयतुIPC_RMID
  • buf साझास्मृतिं चालयति इति दत्तांशसंरचनायाः पता यदि भवान् साझास्मृतिं विलोपयितुम् इच्छति तर्हि 0 पूरयतु ।

यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।

टिप्पणी, प्रयोग root निर्मितं साझास्मृतिं साधारणैः उपयोक्तृभिः निर्मितानाम् अनुमतिनां परवाहं न कृत्वा विलोपयितुं न शक्यते ।

छवि-20240711230653886

छवि-20240711230522921

७.५ वृत्तपङ्क्तिः

७.६ साझास्मृत्याधारितं वृत्तपङ्क्तिः

यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।

७.४ श्मक्त्ल् कार्यम्

एतत् कार्यं साझास्मृतेः संचालनाय सर्वाधिकं प्रयुक्तं कार्यं साझास्मृतिं विलोपयितुं भवति ।

int shmctl(int shmid, int command, struct shmid_ds *buf);
  • 1
  • श्मिड shmget() फंक्शन् द्वारा प्रत्यागतं साझास्मृति id ।
  • आदेश साझास्मृतेः संचालनस्य निर्देशाः यदि भवान् साझास्मृतिं विलोपयितुम् इच्छति तर्हि पूरयतुIPC_RMID
  • buf साझास्मृतिं चालयति इति दत्तांशसंरचनायाः पता यदि भवान् साझास्मृतिं विलोपयितुम् इच्छति तर्हि 0 पूरयतु ।

यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।

टिप्पणी, प्रयोग root निर्मितं साझास्मृतिं साधारणैः उपयोक्तृभिः निर्मितानाम् अनुमतिनां परवाहं न कृत्वा विलोपयितुं न शक्यते ।

[बाह्यलिङ्कचित्रं स्थानान्तरितम् अस्ति...(img-v6qW3XRA-1720711279572)]

[बाह्यलिङ्कचित्रं स्थानान्तरितम् अस्ति...(img-CG0tGAne-1720711279572)]बाह्यलिङ्कप्रतिबिम्बस्थापनं विफलम् अभवत् स्रोतस्थले लीचिंगविरोधी तन्त्रं भवितुम् अर्हति चित्रं रक्षितुं प्रत्यक्षतया अपलोड् कर्तुं च अनुशंसितम् ।
बाह्यलिङ्कप्रतिबिम्बस्थापनं विफलम् अभवत् स्रोतस्थले लीचिंगविरोधी तन्त्रं भवितुम् अर्हति चित्रं रक्षितुं प्रत्यक्षतया अपलोड् कर्तुं च अनुशंसितम् ।
बाह्यलिङ्कप्रतिबिम्बस्थापनं विफलम् अभवत् स्रोतस्थले लीचिंगविरोधी तन्त्रं भवितुम् अर्हति चित्रं रक्षितुं प्रत्यक्षतया अपलोड् कर्तुं च अनुशंसितम् ।

७.५ वृत्तपङ्क्तिः

७.६ साझास्मृत्याधारितं वृत्तपङ्क्तिः