2010-04-02 14 views
5

मैक ओएस एक्स पर अपने तर्कों के आधार पर, जब कोई विशेष प्रक्रिया चल रही है, तो मैं यह पहचानने की कोशिश कर रहा हूं। एक ही नाम के साथ कई प्रक्रियाएं चल रही हैं, लेकिन केवल एक में तर्क होगा जो मैं ढूंढ रहा हूं। प्रक्रियाओं का स्वामित्व उसी उपयोगकर्ता द्वारा नहीं होता है जो मेरा कोड चलाएगा। वे किसी भी तरह से अपने argv संशोधित नहीं किया होगा।पीएस मैक ओएस एक्स पर सभी प्रक्रियाओं के लिए argv कैसे दिखाता है?

'ps' कमांड वास्तव में मुझे आवश्यक जानकारी दिखाता है। लेकिन मैं बहुत पसंद करता हूं कि 'पीएस' को न पड़े और इसके उत्पादन को पार्स न करें।

मैंने मूल रूप से this question से sysctl का उपयोग करके समाधान की कोशिश की, लेकिन यह पता चला है कि केवल आपके लिए प्रक्रियाओं के लिए ही काम करता है; अधिक जानकारी के लिए my other question देखें।

तो पीएस अन्य उपयोगकर्ताओं के स्वामित्व वाली प्रक्रियाओं के लिए argv जानकारी कैसे प्राप्त करता है?

उत्तर

5

मैक ओएस एक्स पीएस पर सेटयूड 0 है, इस तरह यह सभी प्रक्रियाओं के लिए जानकारी प्राप्त करता है। आपको उस जानकारी को प्राप्त करने के लिए रूट के रूप में चलना होगा, इसलिए आपको 0 को निर्धारित करने की आवश्यकता है या सूडो के साथ अपनी उपयोगिता चलाने की आवश्यकता है।

सबसे अच्छा तरीका है बस ps अंडे और उत्पादन पार्स करने के लिए, भले ही आप वास्तव में नहीं चाहते हैं शायद है;)

+0

तो यह है; मैंने यह नहीं देखा था। वह रहस्य को कम से कम हल करता है; धन्यवाद। – DNS

+0

इसके अलावा sysctl कुंजी KERN_PROCARGS2 को '__APPLE_API_UNSTABLE' के रूप में सूचीबद्ध किया गया है, भले ही आप sysctl का उपयोग कर सकें, यह ऐप्पल की गंभीर इच्छाओं में परिवर्तन के अधीन है। – ctpenrose

5

बीएसडी ps (मैक ओएस एक्स में प्रयुक्त) kvm_getargv() का उपयोग प्रक्रिया के लिए कमांडलाइन तर्क प्राप्त करने के लिए करता है।

यहां वास्तविक कॉल है: ps source codekvm_getproc2 के लिए खोजें।

कार्यों के इस परिवार के लिए OpenBSD man page देखें।

+1

एप्पल के संस्करण यहाँ है: http://www.opensource.apple.com/ स्रोत/adv_cmds/adv_cmds-138.1/ps/ – Dipstick

+0

यह दिलचस्प है, हालांकि libkvm को 10.5 से आगे (और शीर्षलेख अनुपलब्ध) बहिष्कृत किया गया है। जेसन कोको के जवाब के आधार पर यह भी प्रकट होता है, कि यह sysctl के समान सीमा हो सकती है। – DNS