हम ps
कमांड का उपयोग करके एक प्रक्रिया के मालिक को निर्धारित कर सकते हैं । क्या इसका मतलब यह है कि अन्य उपयोगकर्ता उस प्रक्रिया को नहीं चला सकते / मार सकते हैं / फिर से शुरू कर सकते हैं?
हम ps
कमांड का उपयोग करके एक प्रक्रिया के मालिक को निर्धारित कर सकते हैं । क्या इसका मतलब यह है कि अन्य उपयोगकर्ता उस प्रक्रिया को नहीं चला सकते / मार सकते हैं / फिर से शुरू कर सकते हैं?
जवाबों:
पढ़ें क्रेडेंशियल्स (7) , कांटा (2) , execve (2) । कांटा सिस्टम कॉल रास्ता प्रक्रियाओं बनाई गई हैं है (आज, fork
अक्सर साथ लागू किया जाता क्लोन (2) लेकिन आप उस एक कार्यान्वयन विस्तार के रूप में देख सकते हैं)। कार्यकारी सिस्टम कॉल तरीका है निष्पादन कार्यक्रम शुरू कर रहे हैं। याद रखें कि सब कुछ कुछ प्रक्रिया से किया जाता है कुछ सिस्टम कॉल ( syscalls (2) में सूचीबद्ध ) के साथ। बहुत पहले प्रक्रिया ( init या systemd ) को बूट समय पर कर्नेल द्वारा जादुई रूप से शुरू किया गया है। अन्य प्रक्रियाएँ फोर्क (2) द्वारा शुरू की गई हैं। आधुनिक लिनक्स कर्नेल कभी-कभी - लेकिन शायद ही कभी - जादुई रूप से कुछ विशेष प्रक्रियाओं (जैसे /sbin/hotplug
) या कर्नेल थ्रेड्स (जैसे kworker
, kswapd
....) को शुरू करते हैं।
तो हां, हर प्रक्रिया (और हर फ़ाइल) में कुछ मालिक (तकनीकी रूप से यूआईडी , एक छोटा गैर-नकारात्मक नंबर) और समूह (जीआईडी) होता है। 0 uid रूट के लिए है और इसमें अतिरिक्त अनुमतियां हैं।
के बारे में भी पढ़ें setuid (और setreuid (2) ...) यह मुश्किल है।
क्या इसका मतलब यह है कि अन्य मालिक उस प्रक्रिया को नहीं चला सकते हैं?
एक प्रक्रिया पहले से चल रही है (लेकिन यह निष्क्रिय या प्रतीक्षा की जा सकती है), इसलिए कोई भी इसे फिर से नहीं चला सकता है। कार्यक्रम के अंदर एक प्रक्रिया (कुछ गतिशील) (एक निष्पादन योग्य फ़ाइल , अक्सर ईएलएफ प्रारूप में) को इसके अंदर चलाने के लिए भ्रमित न करें ।
एक दिए गए कार्यक्रम (जैसे /bin/bash
) को कई प्रक्रियाओं में निष्पादित किया जा सकता है। कई निष्पादक आपकी डिस्क पर बिना किसी इंस्टेंट (किसी दिए हुए इंस्टैंट पर) चल रहे हैं, उन्हें चलाने वाली कोई भी प्रक्रिया।
लिनक्स पर, खरीद (5) प्रक्रियाओं की स्थिति के बारे में जानने के लिए बहुत उपयोगी है। उदाहरण के लिए प्रयास करें cat /proc/$$/status
और cat /proc/self/maps
। यह भी देखें pgrep (1) , ps (1) , शीर्ष (1) ।
प्रत्येक प्रक्रिया का अपना वर्चुअल एड्रेस स्पेस होता है , उसकी अपनी फाइल डिस्क्रिप्टर टेबल, अपनी खुद की वर्किंग डाइरेक्टरी (और अक्सर कई थ्रेड्स , pthreads (7 ) आदि) आदि को देखना ...
क्या इसका मतलब है कि अन्य मालिक उस प्रक्रिया को नहीं चला सकते / मार सकते हैं / फिर से शुरू कर सकते हैं?
एक प्रक्रिया चलाने का कोई मतलब नहीं है (यह पहले से ही चल रहा है)। हालाँकि, पीआईडी 1234 की प्रक्रिया के निष्पादन योग्य /proc/1234/exe
सिमलिंक के रूप में उपलब्ध है , और आप इसे निष्पादित करने के लिए उपयोग कर सकते हैं (2) - लेकिन आपको शायद नहीं करना चाहिए -। अनुमति के नियम execve
लागू होते हैं।
एक प्रक्रिया (2) को मारने के लिए , आपके पास आमतौर पर एक ही यूआईडी होना चाहिए। हालाँकि, प्रलेखन बताता है:
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session.
एक प्रक्रिया को रोकने के लिए, SIGSTOP
(या SIGTSTP
) सिग्नल को किल (2) के साथ उपयोग करें । संकेत देखें (7) ।
एक रुकी हुई प्रक्रिया को फिर से शुरू करने के लिए, SIGCONT
सिग्नल का उपयोग करें ।
मालिक आमतौर पर उस प्रक्रिया को लॉन्च करने वाला उपयोगकर्ता होता है। आदेश अन्य उपयोगकर्ताओं द्वारा निष्पादित किया जा सकता है, लेकिन यह एक अलग प्रक्रिया होगी।
क्या इसका मतलब यह है कि अन्य मालिक उस प्रक्रिया को नहीं चला सकते हैं?
कोई दूसरा मालिक नहीं है। प्रोग्राम (निष्पादन योग्य फ़ाइलें) और प्रक्रियाओं (प्रोग्राम चलाने) को भ्रमित न करें।
क्या इसका मतलब यह है कि अन्य मालिक उस प्रक्रिया को चला / मार नहीं सकते / फिर से शुरू कर सकते हैं?
एकल स्वामी ने पहले ही प्रक्रिया शुरू कर दी थी। यदि आप अन्य उपयोगकर्ताओं से मतलब रखते हैं, मालिकों से नहीं, तो यह निर्भर करता है।
रूट, यानी uid
0 के बराबर वाला उपयोगकर्ता , पूरी शक्ति रखता है। समान साझा करने वाले अन्य उपयोगकर्ता uid
, OS के दृष्टिकोण से, समान उपयोगकर्ता हैं, इसलिए इस प्रक्रिया पर भी पूरी शक्ति है।
एक अलग यूआईडी वाले उपयोगकर्ता प्रक्रिया को मारने / रोकने / फिर से शुरू करने में सक्षम नहीं होंगे, जब तक कि उन्हें स्वामी या मूल विशेषाधिकार के माध्यम से sudo
या इसी तरह के आदेश पर या कुछ हद तक स्विच करने की अनुमति नहीं दी जाती है , यदि वे उस प्रक्रिया से संबंधित हैं। उनके पदानुक्रम से।