यह लिनक्स कर्नेल सुविधा पर है: प्रक्रिया के लिए दो अलग-अलग नाम हैं।
- नामों में से एक निष्पादन योग्य के पथ का अंतिम घटक है, उदा।
native_executable
यदि आपका आवेदन /data/apps/com.example.hello/native_executable
पर स्थित है। यह वह नाम है जो Name
/proc/PID/status
के क्षेत्र में दिखाई देता है। कर्नेल इसे 15 अक्षरों तक छोटा कर देता है, इसलिए इस मामले में इसमें native_executab
शामिल है।
- दूसरा नाम प्रोग्राम द्वारा पारित किया गया है जो एप्लिकेशन को इसके कमांड लाइन पैरामीटर # 0 (
argv[0]
में सी, args[0]
जावा में) कहते हैं। यह वह नाम है जो /proc/PID/cmdline
की शुरुआत में दिखाई देता है और ps
दिखाता है।
- निष्पादन योग्य का मार्ग प्रतीकात्मक लिंक
/proc/PID/exe
का लक्ष्य भी है।
सम्मेलन द्वारा, जब कोई प्रोग्राम किसी अन्य से शुरू होता है, तो इसे निष्पादन योग्य फ़ाइल के नाम को कमांड लाइन पैरामीटर 0 के रूप में उपयोग करना चाहिए, लेकिन यह अन्यथा करना चुन सकता है। Name
/proc/PID/status
का क्षेत्र हमेशा कर्नेल द्वारा निष्पादन योग्य (संक्षिप्त) नाम पर सेट होता है।
यह एक सामान्य लिनक्स सुविधा है - Can I use standard tools to get the full name of a process, when its name has embedded spaces? पर Ask Ubuntu पर भी देखें।
एप्लिकेशन स्वयं दोनों नामों को बाद में बदल सकता है (यद्यपि लंबाई बाधाएं हैं)। Dalvik अनुप्रयोगों के बीच अंतर करने के लिए इस क्षमता का उपयोग करता है: सभी अनुप्रयोग एक ही देशी निष्पादन योग्य /sytem/bin/app_process
से स्टेम; उन्हें सभी को app_process
कहने के बजाय, वीएम दोनों नामों को एप्लिकेशन पैकेज नाम के रूप में बदल देता है। /proc/PID/status
में नाम 15 वर्णों तक सीमित है, इसलिए इसे छोटा कर दिया गया है। आप /proc/PID/cmdline
से लंबा नाम प्राप्त कर सकते हैं (पहले नल बाइट तक पढ़ें)।
बिल्कुल सही धन्यवाद! – predhme
नाम 15 वर्णों को छोटा करने का कारण क्या है? ('मैन proc' पर TASK_COMM_LEN)। एक बहुत कम सीमा लगता है। –
@PabloBianchi डेटा संरचना स्थिर आकार को रखने के लिए इसे छोटा कर दिया गया है, जो कर्नेल में महत्वपूर्ण है। मुझे नहीं पता कि आकार इतना छोटा क्यों है। – Gilles