2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
सिग्नल् (signal) इति सॉफ्टवेयर-व्यत्ययम् अस्ति यत् प्रक्रियाणां मध्ये सन्देशानां प्रसारणस्य एकः विधिः अस्ति, परन्तु एतत् प्रक्रियां प्रति किमपि दत्तांशं प्रसारयितुं न शक्नोति ।
संकेताः उत्पद्यन्ते इति अनेके कारणानि सन्ति Shell इत्यस्मिन् भवन्तः उपयोक्तुं शक्नुवन्तिkill
तथाkillall
संकेतं प्रेषयितुं आदेशः : १.
kill -信号的类型 进程编号
killall -信号的类型 进程名
संकेतनाम | संकेत मूल्य | पूर्वनिर्धारित संसाधन क्रिया | संकेतस्य कारणम् |
---|---|---|---|
सिघुप् | 1 | एकः | टर्मिनल् लम्बते अथवा नियन्त्रणप्रक्रिया समाप्तं भवति |
SIGINT इति | 2 | एकः | कीबोर्ड व्यत्यय Ctrl+c |
SIGQUIT इति | 3 | ग | कीबोर्डस्य escape कीलं नुद्यते |
सिगिल् | 4 | ग | अवैध निर्देश |
सिग्ट्रैप् | 5 | ग | breakpoint निर्देशाः |
सिगाबर्ट | 6 | ग | abort(3) द्वारा निर्गतं गर्भपातसंकेतम् । |
सिग्बुस् | 7 | ग | बस त्रुटिः |
सिगफपे | 8 | ग | प्लवकबिन्दु अपवादः |
सिग्किल् | 9 | एकः | kill -9 प्रक्रियां हन्ति, एषः संकेतः गृहीतुं उपेक्षितुं च न शक्यते |
सिगुसर१ | 10 | एकः | उपयोक्तृ परिभाषित संकेत 1 |
सिगसेगव | 11 | ग | अमान्यस्मृतिसन्दर्भः (सीमातः बहिः सरणी, शून्यसूचकसञ्चालनम्) |
सिगुस्र२ | 12 | एकः | उपयोक्तृ परिभाषित संकेत 2 |
SIGPIPE इति | 13 | एकः | पठनप्रक्रिया विना पाइप् मध्ये दत्तांशं लिखन्तु |
सिगलर्म् | 14 | एकः | अलार्म घड़ी संकेत, अलार्म() कार्य द्वारा प्रेषित संकेत |
SIGTERM इति | 15 | एकः | समाप्तिसंकेतः, पूर्वनिर्धारितरूपेण प्रेषितः संकेतः |
SIGSTKFLT | 16 | एकः | स्तम्भदोषः |
SIGCHLD | 17 | ख | बालप्रक्रिया समाप्ते सति उत्सर्ज्यते |
SIGCONT इति | 18 | घ | स्थगितप्रक्रियाम् पुनः आरभत |
SIGSTOP | 19 | घ | प्रक्रियां स्थगयन्तु |
SIGTSTP | 20 | घ | टर्मिनल् स्टॉप कीलं नुदन्तु |
सिग्तिन् | 21 | घ | पृष्ठभूमिप्रक्रिया टर्मिनल् पठितुं अनुरोधं करोति |
सिग्ट्टौ | 22 | घ | पृष्ठभूमिप्रक्रिया टर्मिनल् मध्ये लिखितुं अनुरोधं करोति |
सिगुर्ग | 23 | ख | आपत्कालीन स्थितिपरिचयः (सॉकेट्) २. |
SIGXCPU | 24 | ग | CPU समयसीमा अतिक्रान्तवती |
SIGXFSZ | 25 | ग | सञ्चिकायाः आकारस्य सीमा अतिक्रान्तवती |
सिग्वताल्र्म | 26 | एकः | आभासी घड़ी संकेत |
सिगप्रोफ | 27 | एकः | घड़ीसंकेतानां विश्लेषणं कुर्वन्तु |
SIGWINCH इति | 28 | ख | विण्डो आकारः परिवर्तते |
SIGPOLL | 29 | ख | मतदान (Sys V) ९. |
SIGPWR | 30 | एकः | विद्युत् विफलता |
सिग्सीस् | 31 | ग | अवैध व्यवस्था आह्वान |
A इत्यस्य पूर्वनिर्धारितं कार्यं प्रक्रियां समाप्तुं भवति ।
B इत्यस्य पूर्वनिर्धारितक्रिया अस्य संकेतस्य अवहेलना अस्ति ।
C इत्यस्य पूर्वनिर्धारितक्रिया प्रक्रियां समाप्तं कृत्वा कर्नेल् इमेज डम्प् कर्तुं भवति ।
D इत्यस्य पूर्वनिर्धारितक्रिया प्रक्रियां स्थगयितुं भवति, तथा च यः कार्यक्रमः स्थगितस्थितौ प्रविशति सः निरन्तरं निष्पादयितुं शक्नोति ।
प्रक्रियाणां संकेतानां नियन्त्रणस्य त्रयः उपायाः सन्ति- १.
signal()
कार्याणि कार्यक्रमः संकेतान् कथं नियन्त्रयति इति सेट् कर्तुं शक्नुवन्ति ।
कार्यघोषणा : १.
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
पैरामीटर् विवरणम् : १.
sig
:ग्रहणार्थं संकेतं निर्दिशन्तु।func
: संकेतसंसाधनकार्यं प्रति सूचकः। प्रसंस्करणकार्यं पूर्णाङ्कमापदण्डं प्राप्तुं आवश्यकं भवति, यत् गृहीतसंकेतसङ्ख्या अस्ति ।SIG_DFL
:SIG_DFL मैक्रो पूर्वनिर्धारितसंकेतसंसाधनविधिं प्रतिनिधियति ।उपयुञ्जताम्SIG_DFL
यथाsignal
फंक्शन् इत्यस्य द्वितीयः पैरामीटर् सूचयति यत् संकेतस्य कृते सिस्टम् डिफॉल्ट् प्रोसेसिङ्ग् मेथड् उपयुज्यते ।SIG_IGN
:SIG_IGN मैक्रो इत्यस्य अर्थः संकेतस्य अवहेलना भवति ।उपयुञ्जताम्SIG_IGN
यथाsignal
कार्यस्य द्वितीयः पैरामीटर् सूचयति यत् यदा प्रक्रिया संकेतं प्राप्नोति तदा सा तस्य अवहेलनां करिष्यति, किमपि प्रक्रियां न करिष्यति । एतेन कतिपयेषु परिस्थितिषु प्रक्रियाणां अप्रत्याशितरूपेण समाप्तिः वा बाधा वा न भवति ।SIG_ERR
:SIG_ERR
दोषान् सूचयितुं मैक्रोस् उपयुज्यन्ते ।न यथाsignal
फंक्शन् इत्यस्य द्वितीयः पैरामीटर् इत्यस्य स्थाने यथा भवतिsignal
फंक्शन् इत्यस्य रिटर्न् वैल्यू सूचयति यत् आह्वानं विफलम् अभवत् ।यदिsignal
यदि फंक्शन् इत्यस्य आह्वानं विफलं भवति तर्हि तत् पुनः आगमिष्यतिSIG_ERR
.एतत् सामान्यतया अन्वेषणाय, प्रक्रियायै च उपयुज्यतेsignal
फंक्शन् कॉल् इत्यस्मिन् त्रुटिः।सेवाकार्यक्रमः पृष्ठभूमितः चाल्यते यदि भवान् तत् निवारयितुम् इच्छति तर्हि तस्य वधः सद्विचारः नास्ति, यतः यदा प्रक्रिया मारिता भवति तदा सा सहसा म्रियते, तदनन्तरं कार्यं न व्यवस्थाप्यते
यदि भवान् सेवाकार्यक्रमाय संकेतं प्रेषयति तर्हि संकेतं प्राप्त्वा सेवाकार्यक्रमः एकं कार्यं आह्वयति, कार्ये पश्चात्तापसङ्केतं च लिखति, कार्यक्रमः योजनाबद्धरीत्या निर्गन्तुं शक्नोति
सेवाकार्यक्रमाय 0 इत्यस्य संकेतं प्रेषयित्वा कार्यक्रमः जीवितः अस्ति वा इति ज्ञातुं शक्यते ।
Linux प्रचालनतन्त्रं प्रदाति kill
तथाkillall
आदेशः कार्यक्रमाय संकेतं प्रेषयतिkill()
पुस्तकालयस्य कार्याणि अन्यप्रक्रियाभ्यः संकेतान् प्रेषयन्ति ।
कार्यघोषणा : १.
int kill(pid_t pid, int sig);
kill()
फंक्शन् पैरामीटर्स् गृह्णातिsig
निर्दिष्टः संकेतः पैरामीटर् प्रति प्रसारितः भवतिpid
निर्दिष्टा प्रक्रिया।
पैरामीटर् pid
अनेकाः परिस्थितयः सन्ति- १.
pid > 0
संकेतं प्रक्रियां प्रति यथाpid
प्रक्रिया।pid = 0
वर्तमानप्रक्रियायाः समाने प्रक्रियासमूहे संकेतं प्रसारयन्तु प्रायः मातापितृप्रक्रियाद्वारा बालप्रक्रियायाः संकेतान् प्रेषयितुं भवतिpid < -1
संकेतं प्रक्रियासमूहस्य ID मध्ये पारयन्तु|pid|
सर्वेषां प्रक्रियाणां ।pid = -1
संकेतं सर्वेभ्यः प्रक्रियाभ्यः प्रसारयति येषां संकेतं प्रेषयितुं अनुमतिः अस्ति, परन्तु संकेतं प्रेषितवती प्रक्रिया न ।प्रक्रियायाः समाप्तेः ८ उपायाः सन्ति, येषु ५ सामान्यसमाप्तिः सन्ति, ते सन्ति :
main()
कार्याणां कृतेreturn
निर्वतनम्;exit()
नियोग;_exit()
वा_Exit()
नियोग;return
निर्वतनम्;pthread_exit()
निर्वतनम्;असामान्यतया समाप्त्यर्थं त्रयः उपायाः सन्ति, ते सन्ति- १.
abort()
function abort;अस्ति main()
कार्ये, २.return
प्रत्यागतं मूल्यं समाप्तिस्थितिः अस्ति, यदि नreturn
कथनं वा आह्वानं वाexit()
, तर्हि प्रक्रियायाः समाप्तिस्थितिः 0 भवति ।
शेल् मध्ये प्रक्रियासमाप्तेः स्थितिं पश्यन्तु :
echo $?
प्रक्रियां सामान्यतया समाप्तुं ३ कार्याणि (exit()
तथा_Exit()
ISO C, 2019 द्वारा निर्दिष्टम् अस्ति ।_exit()
POSIX द्वारा निर्दिष्टम् अस्ति):
void exit(int status);
void _exit(int status);
void _Exit(int status);
status
प्रक्रियासमाप्तेः स्थितिः ।
return
यदा फंक्शन् प्रत्यागच्छति तदा स्थानीयवस्तुनः विध्वंसकः आह्वयते इति सूचयति ।main()
कार्येreturn
वैश्विकवस्तुनाशकः अपि उच्यते ।exit()
प्रक्रियां समाप्तुं सूचयति, स्थानीयवस्तुनः विध्वंसकः न आह्वयते, केवलं वैश्विकवस्तुनः विध्वंसकः आह्वयते ।_exit()
तथा_Exit()
प्रत्यक्षतया निर्गच्छन्तु, सफाईकार्यं न भविष्यति।प्रक्रिया उपलब्धा अस्ति atexit()
कार्यपञ्जीकरणं कार्याणि समाप्तं करोति (३२ पर्यन्तं), एते कार्याणि भविष्यन्तिexit()
स्वयमेव आह्वयति।
int atexit(void (*function)(void));
exit()
समाप्तिकार्याणि यस्मिन् क्रमेण आह्वयन्ति सः पञ्जीकरणसमयात् विपर्यस्तः भवति ।
system()
फंक्शन् प्रोग्राम् निष्पादयितुं सरलं विधिं प्रदाति, प्रोग्राम् तथा च पैरामीटर्स् पारयति यत् स्ट्रिंग् रूपेण निष्पादयितुं आवश्यकम् अस्ति ।system()
केवलं कार्यम्।
कार्यघोषणा : १.
int system(const char * string);
system()
फंक्शन् इत्यस्य रिटर्न् वैल्यू अधिकं कष्टप्रदम् अस्ति ।
system()
फंक्शन् अशून्यं प्रत्यागच्छति;system()
फंक्शन् 0 प्रत्यागच्छति;system()
फंक्शन् अशून्यं प्रत्यागच्छति ।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[]);
सूचना:
errno
मध्यं।exec
तदनन्तरं आह्वानककार्यक्रमस्य स्थाने आहूतः कार्यक्रमः आगमिष्यति अर्थात्exec
फंक्शन् इत्यस्य अनन्तरं कोऽपि कोड् निष्पादितः न भविष्यति ।execl()
तथाexecv()
, अन्ये दुर्लभाः प्रयुज्यन्ते ।सम्पूर्णे Linux प्रणाल्यां सर्वाणि प्रक्रियाः वृक्षसंरचने सन्ति ।
उपयुञ्जताम्pstree
भवान् प्रक्रियावृक्षं आदेशेन द्रष्टुं शक्नोति :
pstree -p 进程编号
प्रत्येकं प्रक्रियायाः एकः अद्वितीयः प्रक्रिया-ID भवति यस्य प्रतिनिधित्वं अ-ऋणात्मक-पूर्णाङ्केन भवति । यद्यपि अद्वितीयं तथापि प्रक्रिया-ID पुनः उपयोक्तुं शक्यते । यदा प्रक्रिया समाप्तं भवति तदा तस्याः प्रक्रिया-ID पुनः उपयोगाय अभ्यर्थी भवति । Linux विलम्बितपुनःप्रयोगस्य एल्गोरिदम् इत्यस्य उपयोगं करोति येन नवनिर्मितप्रक्रियायाः ID सद्यः समाप्तप्रक्रियायाः उपयोगात् ID इत्यस्मात् भिन्नः भवति । एतेन नूतनाः प्रक्रियाः समान ID इत्यस्य उपयोगेन समाप्तप्रक्रिया इति भ्रान्त्या न भवन्ति ।
प्रक्रिया ID प्राप्तुं कार्यं:
pid_t getpid(void); // 获取当前进程的ID。
pid_t getppid(void); // 获取父进程的ID。
विद्यमानप्रक्रिया आह्वानं कर्तुं शक्नोतिfork()
फंक्शन् नूतनं प्रक्रियां निर्माति।
कार्यघोषणा : १.
pid_t fork(void);
आश्रित्यfork()
निर्मिता नूतना प्रक्रिया बालप्रक्रिया इति कथ्यते ।
fork()
फंक्शन् एकवारं आह्वयति परन्तु द्विवारं प्रत्यागच्छति । द्वयोः रिटर्न्-योः मध्ये अन्तरं अस्ति यत् बाल-प्रक्रियायाः रिटर्न्-मूल्यं 0 भवति, यदा तु मातापितृ-प्रक्रियायाः रिटर्न्-मूल्यं नवनिर्मित-बाल-प्रक्रियायाः प्रक्रिया-ID भवति
बालप्रक्रिया मातापितृप्रक्रिया च निरन्तरं निष्पादयन्तिfork()
तदनन्तरं सङ्केतः, २. बालप्रक्रिया मातापितृप्रक्रियायाः प्रतिलिपिः अस्ति । बालप्रक्रियायाः मातापितृप्रक्रियायाः दत्तांशस्थानस्य, ढेरस्य, ढेरस्य च प्रतिलिपिः भवति (टिप्पणी: बालप्रक्रियायाः प्रतिलिपिः अस्ति, मातापितृप्रक्रियायाः सह साझा न भवति) ।
fork()
तदनन्तरं मातापितृसन्ततिप्रक्रियाणां निष्पादनक्रमः अनिर्धारितः भवति ।
fork()
, बालप्रक्रिया एतान् अनुरोधानपि सम्पादयतु, मातापितृप्रक्रिया अग्रिमसंयोजनानुरोधस्य प्रतीक्षां निरन्तरं कुर्वती अस्ति ।fork()
पुनरागमनस्य तत्क्षणमेव आहूतःexec
。fork()
एकं विशेषता अस्ति यत् मातापितृप्रक्रियायां उद्घाटिताः सञ्चिकावर्णकाः बालप्रक्रियायां प्रतिलिपिताः भविष्यन्ति, मातापितृप्रक्रिया बालप्रक्रिया च समानसञ्चिकाविक्षेपं साझां कुर्वन्ति
यदि मातापितृप्रक्रिया बालप्रक्रिया च समानवर्णकेन सूचितसञ्चिकायां किमपि रूपेण समन्वयनं विना लिखन्ति तर्हि तेषां उत्पादनं परस्परं मिश्रितं भवितुम् अर्हति
अस्मिन् क्षणे भवन्तः द्रष्टुं शक्नुवन्ति यत् केवलं एकलक्षपङ्क्तयः दत्तांशाः सन्ति ।
अस्मिन् समये दत्तांशस्य २,००,००० पङ्क्तिः भवितुमर्हति यतोहि सञ्चिकालेखनक्रिया परमाणुः नास्ति । लेखनस्य विफलतां जनयति ।
vfork()
फंक्शन् कॉल्स् तथा रिटर्न् वैल्यूस् इत्येतयोः समानम् अस्तिfork()
समानं, परन्तु तेषां शब्दार्थाः भिन्नाः सन्ति।
vfork()
कार्यस्य उपयोगः नूतनप्रक्रियायाः निर्माणार्थं भवति यस्याः उद्देश्यं भवतिexec
एकः नूतनः कार्यक्रमः यः मातापितृप्रक्रियायाः पतास्थानं प्रतिलिपिं न करोति यतः बालप्रक्रिया तत्क्षणमेव आह्वयतिexec
, अतः मातापितृप्रक्रियायाः पतास्थानस्य उपयोगः न भविष्यति । यदि बालप्रक्रिया मातापितृप्रक्रियायाः पतास्थानस्य उपयोगं करोति तर्हि अज्ञातपरिणामाः भवितुम् अर्हन्ति ।
vfork()
तथाfork()
अन्यः भेदः अस्ति : १.vfork()
बालप्रक्रिया प्रथमं चालयति इति सुनिश्चितं कुर्वन्तु बालप्रक्रियायां च आह्वयन्तुexec
वाexit
ततः मातापितृप्रक्रिया पुनः कार्यं आरभते ।
प्रचालनतन्त्रे ज़ॉम्बी प्रक्रिया बालप्रक्रियाम् निर्दिशति या समाप्तवती परन्तु तस्याः मातापितृप्रक्रिया अद्यापि तस्याः निर्गमनस्थितिं न पठितवती । यद्यपि ज़ॉम्बी प्रक्रिया इदानीं न प्रचलति तथापि प्रक्रियासारणीयां प्रविष्टिं गृह्णाति येन कर्नेल् प्रक्रियायाः निर्गमनस्थितिसूचनाम् (यथा प्रक्रिया ID, निर्गमनस्थितिः इत्यादीनि) रक्षितुं शक्नोति यावत् मातापितृप्रक्रिया एतां सूचनां न पठति
यदि मातापितृप्रक्रिया बालप्रक्रियायाः पूर्वं निर्गच्छति तर्हि बालप्रक्रिया प्रक्रिया १ द्वारा आतिथ्यं भविष्यति (एषः अपि प्रक्रियां पृष्ठभूमितः चालयितुं मार्गः अस्ति) ।
यदि बालप्रक्रिया मातापितृप्रक्रियायाः पूर्वं निर्गच्छति, मातापितृप्रक्रिया च बालप्रक्रियायाः निर्गमनसूचना न संसाधयति, तर्हि बालप्रक्रिया ज़ॉम्बीप्रक्रिया भविष्यति
कर्नेल् प्रत्येकस्य बालप्रक्रियायाः कृते एकं दत्तांशसंरचनां धारयति, यत्र प्रक्रियासङ्ख्या, समाप्तिस्थितिः, प्रयुक्तः CPU समयः इत्यादयः सन्ति । यदि मातापितृप्रक्रिया बालप्रक्रियायाः निर्गमनसूचनाः संसाधयति तर्हि कर्नेल् एतां दत्तांशसंरचनां मुक्तं करिष्यति । यदि मातापितृप्रक्रिया बालप्रक्रियायाः निर्गमनसूचना न संसाधयति तर्हि कर्नेल् एतां दत्तांशसंरचनां न मुञ्चति, बालप्रक्रियायाः प्रक्रियासङ्ख्या च सर्वदा व्याप्ता भविष्यति प्रणाल्यां उपलब्धाः प्रक्रियासङ्ख्याः सीमिताः सन्ति यदि बहूनां ज़ॉम्बी प्रक्रियाः उत्पद्यन्ते तर्हि प्रणाली नूतनाः प्रक्रियाः जनयितुं न शक्नोति यतोहि प्रक्रियासङ्ख्याः उपलब्धाः नास्ति
signal(SIGCHLD, SIG_IGN)
बालप्रक्रियायाः निर्गमने तस्य रुचिः नास्ति इति कर्नेल् सूचयन्तु, बालप्रक्रियायाः निर्गमनस्य अनन्तरं तत्क्षणमेव तस्य दत्तांशसंरचना मुक्ता भविष्यति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);
रिटर्न् वैल्यू बालप्रक्रियायाः संख्या अस्ति ।
stat_loc
बालप्रक्रियायाः समाप्तेः विषये सूचना अस्ति वा : १.
क) यदि सामान्यतया समाप्तं भवति तर्हि मैक्रो WIFEXITED(stat_loc)
सत्यं प्रत्यागच्छतु, मैक्रोWEXITSTATUS(stat_loc)
समाप्तिस्थितिः प्राप्तुं शक्यते;
ख) यदि असामान्यरूपेण समाप्तं भवति तर्हि स्थूलः WTERMSIG(stat_loc)
प्रक्रियां समाप्तुं संकेतं प्राप्नोति।
यदि मातापितृप्रक्रिया व्यस्ता अस्ति तर्हि भवन्तः गृहीतुं शक्नुवन्ति SIGCHLD
संकेतः, संकेतसंसाधनकार्य्ये आह्वयतिwait()
/waitpid()
。
[प्रक्रियाणां मध्ये संकेतान् प्रेषयन्तु](##1.5 संकेतान् प्रेषयन्तु)
बहुप्रक्रियासेवाकार्यक्रमे यदि उपप्रक्रिया निर्गमनसंकेतं प्राप्नोति तर्हि उपप्रक्रिया स्वयमेव निर्गमिष्यति ।
यदि मातापितृप्रक्रिया निर्गमनसंकेतं प्राप्नोति तर्हि सर्वेभ्यः बालप्रक्रियाभ्यः निर्गमनसंकेतान् प्रेषयेत् ततः स्वयमेव निर्गन्तुं अर्हति ।
बहुसूत्राणि प्रक्रियायाः पतास्थानं साझां कुर्वन्ति,यदि बहुविधसूत्राणां समानस्मृतिम् अभिगन्तुं आवश्यकं भवति तर्हि केवलं वैश्विकचरानाम् उपयोगं कुर्वन्तु ।。
बहुविधप्रक्रियासु प्रत्येकस्य प्रक्रियायाः पतास्थानं स्वतन्त्रं भवति, न तु साझीकृतम् ।यदि बहुविधप्रक्रियाणां समानस्मृतौ प्रवेशस्य आवश्यकता भवति तर्हि वैश्विकचरानाम् उपयोगः कर्तुं न शक्यते, केवलं साझास्मृतिः एव उपयोक्तुं शक्यते ।。
साझास्मृतिः बहुविधप्रक्रियाणां (प्रक्रियाणां मध्ये रक्तसम्बन्धस्य आवश्यकता नास्ति) समानस्मृतिस्थानं प्राप्तुं शक्नोति । प्रक्रियाः साझास्मृतिं स्वस्य पतास्थानेन सह संयोजयितुं शक्नुवन्ति यदि एकः प्रक्रिया साझास्मृतौ दत्तांशं परिवर्तयति तर्हि अन्यप्रक्रियाभिः पठितदत्तांशः अपि परिवर्तते ।
साझास्मृतिः तालातन्त्रं न ददाति, अर्थात् यदा प्रक्रिया साझास्मृतिं पठति/लिखति तदा अन्यप्रक्रियाणां पठन/लेखनं न निवारयतियदि भवान् साझास्मृतेः पठनं/लेखनं ताडयितुम् इच्छति तर्हि सेमाफोर् इत्यस्य उपयोगं कर्तुं शक्नोति . Linux साझास्मृतेः संचालनाय कार्याणां समुच्चयं प्रदाति ।
एतत् कार्यं साझास्मृतिः निर्मातुं/प्राप्त्यर्थं उपयुज्यते ।
int shmget(key_t key, size_t size, int shmflg);
typedef unsigned int key_t
), सामान्यतया षट्दशमलये, उदाहरणार्थम् 0x5005
, भिन्न-भिन्न-साझा-स्मृतीनां कीलानि समानानि न भवितुम् अर्हन्ति ।0666|IPC_CREAT
यदि साझीकृतस्मृतिः नास्ति तर्हि तत् रचयतु इति सूचयति ।उपयुञ्जताम् ipcs -m
भवान् प्रणाल्याः साझास्मृतिं द्रष्टुं शक्नोति, यत्र सन्ति: कीलः, साझास्मृति-id (shmid), स्वामी, अनुमतिः (perms), आकारः (बाइट्) च ।
उपयुञ्जताम् ipcrm -m 共享内存id
साझास्मृतिः निम्नलिखितरूपेण स्वहस्तेन विलोपयितुं शक्यते ।
नोटः- साझास्मृतौ दत्तांशप्रकारस्य कृते पात्रस्य उपयोगः कर्तुं न शक्यते, केवलं मूलभूतदत्तांशप्रकारस्य उपयोगः कर्तुं शक्यते ।
एतत् कार्यं वर्तमानप्रक्रियायाः पतास्थाने साझास्मृतिं संयोजयितुं उपयुज्यते ।
void *shmat(int shmid, const void *shmaddr, int shmflg);
shmget()
कार्येण प्रत्यागतः साझास्मृतिपरिचयः ।आह्वानं सफले सति साझास्मृतेः आरम्भसङ्केतं प्रत्यागच्छति, यदा च विफलं भवति तदा प्रत्यागच्छति । (void *)-1
。
एतत् कार्यं वर्तमानप्रक्रियातः साझास्मृतिं विच्छेदयितुं उपयुज्यते, यत् तुल्यम् अस्ति shmat()
कार्यस्य विलोमक्रिया ।
int shmdt(const void *shmaddr);
shmat()
फंक्शन् द्वारा प्रत्यागतं पता ।यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।
एतत् कार्यं साझास्मृतेः संचालनाय सर्वाधिकं प्रयुक्तं कार्यं साझास्मृतिं विलोपयितुं भवति ।
int shmctl(int shmid, int command, struct shmid_ds *buf);
shmget()
फंक्शन् द्वारा प्रत्यागतं साझास्मृति id ।IPC_RMID
。यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।
टिप्पणी, प्रयोग root
निर्मितं साझास्मृतिं साधारणैः उपयोक्तृभिः निर्मितानाम् अनुमतिनां परवाहं न कृत्वा विलोपयितुं न शक्यते ।
यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।
एतत् कार्यं साझास्मृतेः संचालनाय सर्वाधिकं प्रयुक्तं कार्यं साझास्मृतिं विलोपयितुं भवति ।
int shmctl(int shmid, int command, struct shmid_ds *buf);
shmget()
फंक्शन् द्वारा प्रत्यागतं साझास्मृति id ।IPC_RMID
。यदि आह्वानं सफलं भवति तर्हि 0 तथा यदि विफलं भवति तर्हि -1 प्रेषयति ।
टिप्पणी, प्रयोग root
निर्मितं साझास्मृतिं साधारणैः उपयोक्तृभिः निर्मितानाम् अनुमतिनां परवाहं न कृत्वा विलोपयितुं न शक्यते ।
[बाह्यलिङ्कचित्रं स्थानान्तरितम् अस्ति...(img-v6qW3XRA-1720711279572)]
[बाह्यलिङ्कचित्रं स्थानान्तरितम् अस्ति...(img-CG0tGAne-1720711279572)]