अगर मेरे पास एक प्रक्रिया (UNIX मशीन पर) के लिए PID नंबर है, तो मैं इसकी संबद्ध प्रक्रिया का नाम कैसे पता लगा सकता हूं?
मुझे क्या करना होगा?
ps -fp PID
पूर्ण कमांड दिखाएंगे
अगर मेरे पास एक प्रक्रिया (UNIX मशीन पर) के लिए PID नंबर है, तो मैं इसकी संबद्ध प्रक्रिया का नाम कैसे पता लगा सकता हूं?
मुझे क्या करना होगा?
ps -fp PID
पूर्ण कमांड दिखाएंगे
जवाबों:
सभी POSIX- आज्ञाकारी प्रणालियों पर, और लिनक्स के साथ, आप उपयोग कर सकते हैं ps
:
ps -p 1337 -o comm=
यहां, इस प्रक्रिया का चयन इसके पीआईडी के साथ किया जाता है -p
। -o
विकल्प उत्पादन प्रारूप निर्दिष्ट करता है, comm
आदेश नाम जिसका अर्थ है।
इसे भी देखें: ps
- ओपन ग्रुप बेस स्पेसिफिकेशन्स 6
command
इसके बजाय उपयोग इसे ठीक करता है।
$ ps -p 1 -o comm=
init $ ps -p 1 -o command=
/ sbin / init; जिसका अर्थ है कि यह लगभग 15 वर्णों का नहीं है, शायद केवल द्विआधारी का नाम बनाम इसका पूर्ण पथ।
comm
बाइनरी का नाम command
देता है और तर्क 0
आप प्रक्रिया-नाम या कमांड का उपयोग प्रक्रिया-आईडी या पीआईडी से पा सकते हैं
/proc/pid/cmdline
ऐसा करके
cat /proc/pid/cmdline
यहाँ pid वह पीड है जिसके लिए आप नाम को खोजना चाहते हैं
:
# 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
एक निश्चित पिड का उपयोग करके कार्यक्रम का पथ प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं:
ps ax|egrep "^ [PID]"
वैकल्पिक रूप से आप उपयोग कर सकते हैं:
ps -a [PID]
ps -a
सभी प्रक्रियाओं को सूचीबद्ध करें जो टर्मिनल के साथ जुड़ा हुआ है, यह कोई इनपुट नहीं लेता है।
ps
संस्करण पर निर्भर procps version 3.2.7
करता है, ठीक काम करता है।
आप pmap का उपयोग कर सकते हैं। मैं पीआईडी 6649 खोज रहा हूं। और अतिरिक्त प्रक्रिया विवरण काट रहा हूं।
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
ps
सभी कमांड जो आप देखेंगे, बस है java
, लेकिन पारित किए गए बाकी पैरामीटर पूरी तरह से प्रदर्शित किए जाएंगे pmap
।
आप ps के साथ संयोजन में awk का भी उपयोग कर सकते हैं
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
ps ax | grep 1
और देखो कि क्या यह वास्तव में init
प्रक्रिया को लौटाता है, उदाहरण के लिए। (मेरे मामले में, यह 119 लाइनों-वांछनीय नहीं देता है।)
ps aux | awk 'NR==1 || $2==PID'
- और {print $0}
यह कहने की आवश्यकता नहीं है क्योंकि यह डिफ़ॉल्ट है। लेकिन जैसा कि आपने टिप्पणी की, -p
वैसे भी बेहतर है।
Simmilar करने के लिए उत्तर दें , लेकिन कमांड इनवॉइस के बजाय फ़ाइल संचालन पर निर्भर:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm
=> init, not / sbin / init। उनके जवाब में लंबा संस्करण शामिल है। लेकिन +1 वैसे भी।
हैरानी की बात है, किसी ने पीएस के लिए -f (पूर्ण कमांड) विकल्प का उल्लेख नहीं किया है। मैं -e (सब कुछ) के साथ इसका उपयोग करना पसंद करता हूं और परिणामों को संक्षिप्त करने के लिए पाइप करता हूं ताकि मैं अपनी खोज को संकीर्ण कर सकूं।
ps -ef | grep <PID>
पूर्ण कमांड को देखने के लिए यह भी बहुत उपयोगी है कि कोई व्यक्ति आपके सिस्टम पर बहुत सारे संसाधन ले रहा है। यह आपको कमांड में दिए गए विकल्प और तर्क दिखाएगा।
-e -f
उपलब्ध हैं, grep
कई झूठे मैचों का उत्पादन कर सकते हैं जैसे कि grep 33
pid = 933 या 339, ppid = 33 या 933 या 339, 33 सेकंड या 33 मिनट का समय, या प्रोग्रामनाम या तर्क जिसमें 33 शामिल हैं - जिसमें grep
स्वयं भी शामिल है। सभी (AFAIK) ps
है -p
, तो बस ps -fp 33
।
मुझे निम्नलिखित कमांड के साथ सबसे आसान तरीका लगता है:
ps -awxs | grep pid
ps -p${pid}
, यह बहुत सारी झूठी सकारात्मकता को उठाएगा - जिसमें grep
स्वयं भी शामिल है।
पीआईडी खोजने और बैश स्क्रिप्ट के भीतर उपयोग करने के लिए एक सरल स्क्रिप्ट बनाई गई ...
सावधानी के साथ उपयोग करें !!
स्क्रीनशॉट: http://pastebin.com/Cm9YH67U
आंद्रे
ps
याls -l /proc/$PID/exe