मैं सी में प्रक्रिया का नाम कैसे प्राप्त कर सकता हूं? वही नाम, जो /proc/$pid/status
में है। मैं उस फाइल को पार्स नहीं करना चाहता हूं। क्या ऐसा करने का कोई प्रोग्रामेटिक तरीका है?लिनक्स में वर्तमान प्रक्रिया नाम कैसे प्राप्त करें?
उत्तर
या तो argv[0]
द्वारा इंगित किया गया है या वास्तव में आप /proc/self/status
पढ़ सकते हैं। या आप getenv("_")
का उपयोग कर सकते हैं, यह सुनिश्चित नहीं है कि कौन इसे सेट करता है और यह कितना विश्वसनीय है।
argv[0]
के मान को देखें जो main
पर भेजा गया था। यह वह नाम होना चाहिए जिसके अंतर्गत आपकी प्रक्रिया लागू की गई थी।
Unfortunatelly इस मामले मैं न argv करने के लिए [0] – Mariusz
@Mariusz तो फिर तुम proc के माध्यम से जाना करने जा रहे हैं उपयोग किया है में - हालांकि मैं 'सलाह देते हैं/proc/self/cmdline'। – Borealid
@ मारियसज़, आप 'getenv ("_") भी कोशिश कर सकते हैं, हालांकि मुझे यकीन नहीं है कि यह कितना विश्वसनीय है। –
आप __progname
का उपयोग कर सकते हैं। हालांकि यह argv[0]
से बेहतर नहीं है क्योंकि इसमें पोर्टेबिलिटी समस्याएं हो सकती हैं। लेकिन यह इस प्रकार काम कर सकते हैं के रूप में आप argv[0]
लिए पहुँच नहीं है: -
extern char *__progname;
printf("\n%s", __progname);
आप एक glibc का उपयोग कर, तो पर हैं:
#define _GNU_SOURCE
#include <errno.h>
extern char *program_invocation_name;
extern char *program_invocation_short_name;
program_invocation_name देखें (3)
अधिकांश इकाइयों के तहत, __progname
भी libc द्वारा परिभाषित किया गया है। एकमात्र पोर्टेबल रास्ता argv [main() में], क्योंकि आप एक पुस्तकालय को लागू कर रहे हैं, तो आप कर सकते हैं का उपयोग करने के argv[0]
मैं अक्सर निम्नलिखित कॉल का इस्तेमाल करते हैं,
char* currentprocname = getprogname();
यह बीएसडी-विशिष्ट है। आप इसे 'libbsd' के साथ लिनक्स पर प्राप्त कर सकते हैं, लेकिन यह libc का हिस्सा नहीं है क्योंकि यह फ्रीबीएसडी या ओएस एक्स – Cairnarvon
आप नहीं पहुंच पा रहे है एक समान प्रश्न here पर मेरे उत्तर पर एक नज़र डालें।
यह मूल रूप से आपको मुख्य() के बाहर argc, argv [] और envp [] तक पहुंच प्रदान करने में उबलता है। फिर आप कर सकते हैं, जैसा कि दूसरों ने पहले से ही सही ढंग से सुझाव दिया है, प्रक्रिया नाम पुनर्प्राप्त करने के लिए argv [0] का उपयोग करें।
पर है या आप/proc/self/cmdline देख सकते हैं – liang
यह एक ऐसा संस्करण है जो मैकोज़, फ्रीबीएसडी और लिनक्स पर काम करता है।
#if defined(__APPLE__) || defined(__FreeBSD__)
const char * appname = getprogname();
#elif defined(_GNU_SOURCE)
const char * appname = program_invocation_name;
#else
const char * appname = "?";
#endif
- 1. वर्तमान प्रक्रिया में सभी हैंडल का नाम प्राप्त करें
- 2. वर्तमान प्रक्रिया आईडी कैसे प्राप्त करें?
- 3. वर्तमान निष्पादन प्रक्रिया का नाम
- 4. वर्तमान फ़ंक्शन का नाम कैसे प्राप्त करें?
- 5. वर्तमान में निष्पादित प्रक्रिया की प्रक्रिया का स्कीमा नाम प्राप्त करें
- 6. एप्लिकेशन का प्रक्रिया नाम कैसे प्राप्त करें?
- 7. डेल्फी में वर्तमान प्रक्रिया/फ़ंक्शन का नाम कैसे प्राप्त करें (एक स्ट्रिंग के रूप में)
- 8. लिनक्स में सी/सी ++ में उपयोगकर्ता नाम कैसे प्राप्त करें?
- 9. जेएसपी में वर्तमान पृष्ठ का नाम कैसे प्राप्त करें?
- 10. डेल्फी 7 में वर्तमान विधि का नाम कैसे प्राप्त करें?
- 11. वर्तमान कक्षा का नाम प्राप्त करें?
- 12. शेयरपॉइंट वर्तमान उपयोगकर्ता खाता नाम प्राप्त करें?
- 13. PHP वर्तमान निर्देशिका का नाम प्राप्त करें
- 14. एक्शनस्क्रिप्ट - वर्तमान फ़ंक्शन का नाम प्राप्त करें
- 15. जावास्क्रिप्ट - वर्तमान उपयोगकर्ता का नाम कैसे प्राप्त करें
- 16. वर्तमान चल रहे मॉड्यूल पथ/नाम को कैसे प्राप्त करें
- 17. वर्तमान नोड के पैरेंट नोड नाम कैसे प्राप्त करें?
- 18. पायथन/जीएई के साथ वर्तमान डोमेन नाम कैसे प्राप्त करें?
- 19. शानदार टेक्स्ट: वर्तमान दृश्य का फ़ाइल नाम कैसे प्राप्त करें
- 20. वर्तमान जावास्क्रिप्ट फ़ाइल नाम का पूर्ण पथ कैसे प्राप्त करें
- 21. बैच (.bat): पहली स्क्रिप्ट का नाम प्राप्त करें, वर्तमान में
- 22. वर्तमान में निष्पादन विधि का नाम प्राप्त करें
- 23. वर्तमान निर्देशिका कैसे प्राप्त करें?
- 24. वर्तमान कैनवास कैसे प्राप्त करें?
- 25. वर्तमान टाइमस्टैम्प कैसे प्राप्त करें?
- 26. एसक्यूएल में वर्तमान डेटाटाइम कैसे प्राप्त करें?
- 27. FragmentPagerAdapter में वर्तमान स्थिति कैसे प्राप्त करें?
- 28. वर्तमान प्रक्रिया मालिक
- 29. ओरेकल पीएल/एसक्यूएल: स्टैक ट्रेस, पैकेज का नाम और प्रक्रिया का नाम कैसे प्राप्त करें
- 30. प्रक्रिया आईडी से प्रक्रिया आईडी कैसे प्राप्त करें?
ध्यान दें कि 'getenv ("_")' मूल रूप से खोल द्वारा शुरू की गई प्रक्रिया को वापस करने के लिए प्रतीत होता है - अगर मैं इसे 'मेक' द्वारा शुरू की गई प्रक्रिया में कॉल करता हूं, तो मुझे "/ usr/bin/make" दिखाई देता है, बल्कि मेरे प्रक्रिया का नाम। इसका मतलब है कि यह शायद खोल द्वारा निर्धारित है। –
@RogerLipscombe, वास्तव में अच्छा अवलोकन। –