सवाल अगर मुझे किसी प्रक्रिया की पीआईडी ​​संख्या पता है, तो मैं इसका नाम कैसे प्राप्त कर सकता हूं?


अगर मेरे पास एक प्रक्रिया के लिए पीआईडी ​​नंबर है (यूनिक्स मशीन पर), तो मैं इसकी संबंधित प्रक्रिया का नाम कैसे ढूंढ सकता हूं?

मुझे क्या करना होगा?


215
2017-08-17 07:12


मूल


आप उपयोग कर सकते हैं ps या ls -l /proc/$PID/exe - Eddy_Em
@Eddy_Em जो आपको निष्पादन योग्य फ़ाइल देगा, जो हमेशा प्रक्रिया का नाम नहीं है। इसके अलावा, यह पोर्टेबल नहीं है ... - derobert
ps -fp PID पूर्ण आदेश दिखाएगा - Temak


जवाब:


सभी POSIX- अनुपालन प्रणालियों पर, और लिनक्स के साथ, आप इसका उपयोग कर सकते हैं ps:

ps -p 1337 -o comm=

यहां, प्रक्रिया को इसके पीआईडी ​​द्वारा चुना गया है -p-o विकल्प आउटपुट प्रारूप निर्दिष्ट करता है, comm कमांड नाम का अर्थ है।

यह भी देखें: ps - ओपन ग्रुप बेस निर्दिष्टीकरण अंक 6


233
2017-08-17 08:21



लगता है कि आदेश 15 वर्णों को कम कर देता है। का उपयोग करते हुए command इसके बजाय इसे ठीक करता है। - Nemo
[उबंटू 14.04.4 एलटीएस] $ ps -p 1 -o comm=  इस में $ ps -p 1 -o command=  / Sbin / init; जिसका अर्थ है कि यह लगभग 15 वर्ण नहीं है, शायद बाइनरी का नाम बनाम उसका पूरा पथ बनाम। - OmarOthman
वास्तव में, comm बाइनरी का नाम देता है और command तर्क 0 देता है - robbie0630


आप प्रोसेस-आईडी या पीआईडी ​​द्वारा प्रयुक्त प्रक्रिया का नाम या कमांड पा सकते हैं

/proc/pid/cmdline

ऐसा करके

cat /proc/pid/cmdline

यहां पिड वह पिड है जिसके लिए आप नाम ढूंढना चाहते हैं
Exmaple के लिए:

 # ps aux

   ................
   ................
   user  2480  0.0  1.2 119100 12728 pts/0  Sl   22:42   0:01 gnome-terminal
   ................
   ................

पिड 2480 द्वारा उपयोग की जाने वाली प्रक्रिया का नाम ढूंढने के लिए आप इसका उपयोग कर सकते हैं

# cat /proc/2480/cmdline 

 gnome-terminal

39
2017-08-17 08:04



सावधान रहें: ओपी यूनिक्स का उल्लेख करता है। सभी यूनिक्स योजना 9 को प्रक्रिया-विशिष्ट फ़ाइल की तरह लागू नहीं करते हैं। आपका उत्तर आम तौर पर केवल लिनक्स पर लागू होता है। - slhck
हालांकि यह सच है, उन्होंने सवाल "लिनक्स" टैग किया था। कोई भी जो गैर-लिनक्स आधारित यूनिक्स ओएस का उपयोग कर रहा है, उसकी ज़रूरतों को पूरा करने के लिए उत्तर संशोधित करने के लिए काफी उपयोग किया जाएगा - Andrew White


एक निश्चित पिड का उपयोग कर प्रोग्राम का मार्ग प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं:

ps ax|egrep "^ [PID]"

वैकल्पिक रूप से आप इसका उपयोग कर सकते हैं:

ps -a [PID]

enter image description here


12
2018-04-18 02:16



ps -a टर्मिनल से जुड़ी सभी प्रक्रियाओं की सूची बनाएं, इसमें कोई इनपुट नहीं है। - Michael Lee
@MichaelLee मुझे लगता है कि यह पर निर्भर करता है ps संस्करण, पर procps version 3.2.7 ठीक काम करता है। - Pedro Lobito


# ls -la /proc/ID_GOES_HERE/exe

उदाहरण:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai  5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop

7
2018-05-06 00:14



यह एकदम सही है। - jayarjo
शायद बेहतर: readlink /proc/1337/exe। रीडलिंक - मुद्रित प्रतीकात्मक लिंक या कैनोलिक फ़ाइल नाम मुद्रित करें। - Pablo Bianchi


आप pmap का उपयोग कर सकते हैं। मैं पीआईडी ​​664 9 की तलाश में हूं। और अतिरिक्त प्रक्रिया विवरण काट रहा हूं।

$ pmap 6649 | head -1
6649:   /usr/lib64/firefox/firefox

6
2018-05-27 04:28



इस आदेश ने मुझे ज़्यादा ज़रूरत से ज्यादा मदद की, मेरे पास शुरू होने वाली प्रक्रिया की पूरी लाइन है। जावा प्रक्रिया को देखते हुए ps आदेश जो आप देखेंगे वह बस है java, लेकिन पारित शेष पैरामीटर पूरी तरह से प्रदर्शित किया जाएगा pmap। - Mincă Daniel Andrei


आप पीएस के साथ संयोजन में अजीब भी उपयोग कर सकते हैं

ps aux | awk '$2 == PID number for a process  { print $0 }'

उदाहरण:

root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init    

हेड लाइन मुद्रित करने के लिए आप उपयोग कर सकते हैं

 ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'

                 (or) 

 ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'


root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init

3
2017-08-17 09:32



यह अस्थिर है क्योंकि यह उन प्रक्रियाओं का भी चयन करेगा जो उनके आदेश में कहीं भी संख्या शामिल करने के लिए होते हैं। प्रयत्न ps ax | grep 1 और देखें कि यह वास्तव में वापस आता है या नहीं init उदाहरण के लिए, प्रक्रिया। (मेरे मामले में, यह 119 लाइनों को लौटाता है-वांछनीय नहीं।) - slhck
@ एसएलएचके ने जवाब संशोधित किया ... जानकारी के लिए धन्यवाद .. ps -p 1 -o comm = इस सवाल के लिए सबसे अच्छा विकल्प है। - Gangadhar
इसके बजाय, हेडर बनाए रखने के लिए हमें दो रनों की आवश्यकता नहीं है ps aux | awk 'NR==1 || $2==PID' - और कहने की जरूरत नहीं है {print $0} क्योंकि यह डिफ़ॉल्ट है। लेकिन जैसा कि आपने टिप्पणी की थी, -p वैसे भी बेहतर है। - dave_thompson_085


Simmilar करने के लिए स्लैक का जवाब, लेकिन आदेश आमंत्रण के बजाय फ़ाइल संचालन पर भरोसा करते हैं:

MYPID=1
cat "/proc/$MYPID/comm"

2
2017-08-30 23:31



[उबंटू 14.04.4 एलटीएस] cat /proc/1/comm => init, नहीं / sbin / init। उनके जवाब में लंबा संस्करण शामिल है। लेकिन वैसे भी +1। - OmarOthman


हैरानी की बात है कि किसी ने भी पीएस के लिए -फ (पूर्ण कमांड) विकल्प का उल्लेख नहीं किया है। मैं इसे (सब कुछ) के साथ उपयोग करना पसंद करता हूं और परिणामों को grep में पाइप करता हूं ताकि मैं अपनी खोज को संकीर्ण कर सकूं।

ps -ef | grep <PID>

पूर्ण आदेशों को देखने के लिए यह भी बहुत उपयोगी है कि कोई ऐसा चल रहा है जो आपके सिस्टम पर बहुत सारे संसाधन ले रहा है। यह आपको आदेश में दिए गए विकल्प और तर्क दिखाएगा।


2
2018-02-23 21:47



बीएसडी पर काम नहीं करता है (शायद मैकॉक्स सहित? मुझे यकीन नहीं है)। यहां तक ​​कि वहां -e -f उपलब्ध हैं, grep कई झूठे मैचों का उत्पादन कर सकते हैं उदा। grep 33 इसमें पिड = 9 33 या 33 9, पीपीआईडी ​​= 33 या 9 33 या 33 9, 33 सेकंड या 33 मिनट का समय, या प्रोग्राम नाम या 33 शामिल है - जिसमें शामिल है grep अपने आप। सब (AFAIK) ps ज़रूरत है -p, बस ऐसे ps -fp 33। - dave_thompson_085