سؤال إذا كنت أعرف رقم PID في العملية ، كيف يمكنني الحصول على اسمها؟


إذا كان لدي رقم PID لإجراء عملية (على جهاز UNIX) ، كيف يمكنني معرفة اسم العملية المرتبطة به؟

ماذا علي ان افعل؟


215
2017-08-17 07:12


الأصل


يمكنك استخدام ps أو ls -l /proc/$PID/exe - Eddy_Em
Eddy_Em التي ستمنحك الملف القابل للتنفيذ ، وهو ليس دائمًا اسم العملية. أيضا ، هذا ليس محمول ... - derobert
ps -fp PID سوف تظهر القيادة الكاملة - Temak


الأجوبة:


على جميع أنظمة POSIX المتوافقة ، ومع Linux ، يمكنك استخدامها ps:

ps -p 1337 -o comm=

هنا ، يتم اختيار العملية من خلال PID الخاص بها -p. ال -o الخيار يحدد تنسيق الإخراج ، comm وهذا يعني اسم الأمر.

أنظر أيضا: ps - مواصفات Open Group Base المسألة 6


233
2017-08-17 08:21



comm يبدو اقتطاع الأمر إلى 15 حرفًا. عن طريق command بدلا من ذلك حلها. - Nemo
[Ubuntu 14.04.4 LTS] $ ps -p 1 -o comm=  فيه $ ps -p 1 -o command=  / دليل / الحرف الأول. مما يعني أنها ليست حوالي 15 حرفًا ، ربما فقط اسم الثنائي مقابل مساره الكامل. - OmarOthman
في الواقع، comm يعطي اسم الثنائي و command يعيد الوسيطة 0 - robbie0630


يمكنك العثور على اسم العملية أو الأمر الذي يستخدمه معرف العملية أو pid من

/proc/pid/cmdline

عن طريق القيام

cat /proc/pid/cmdline

هنا pid هو pid الذي تريد البحث عن الاسم له
ل exmaple:

 # ps aux

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

للعثور على اسم العملية المستخدمة من قبل pid 2480 يمكنك استخدام

# cat /proc/2480/cmdline 

 gnome-terminal

39
2017-08-17 08:04



كن حذرا: يذكر البروتوكول الاختياري UNIX. لا تعمل كل UNIXes على تنفيذ الخطة 9 مثل العملية. إجابتك عامة تنطبق فقط على لينكس. - slhck
في حين أن هذا صحيح ، فإنهم وضعوا علامة على السؤال "لينكس". سيتم استخدام أي شخص يستخدم نظام التشغيل UNIX بنظام التشغيل Linux غير المستندة إلى Linux لتعديل الإجابات لتلبية احتياجاتهم - Andrew White


للحصول على مسار البرنامج باستخدام pid معين ، يمكنك استخدام:

ps ax|egrep "^ [PID]"

بدلا من ذلك يمكنك استخدام:

ps -a [PID]

enter image description here


12
2018-04-18 02:16



ps -a سرد كافة العمليات المرتبطة بالطرف ، فإنه لا يأخذ أي إدخال. - Michael Lee
MichaelLee أعتقد أنه depenends على 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. readlink - طباعة روابط رمزية حلها أو أسماء ملفات متعارف عليها. - Pablo Bianchi


يمكنك استخدام pmap. أنا أبحث عن PID 6649. وقطع قطع تفاصيل العملية الإضافية.

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

6
2018-05-27 04:28



لقد ساعدني هذا الأمر أكثر مما أحتاج إليه ، فلديّ خط كامل من العملية التي بدأت. نظرا لعملية جافا ، مع ps كل ما تراه هو فقط java، ولكن سيتم عرض بقية المعلمات التي تم تمريرها بالكامل مع pmap. - Mincă Daniel Andrei


يمكنك أيضا استخدام awk في تركيبة مع PS

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    

لطباعة HEAD LINE يمكنك استخدامه

 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
slhck تعديل الإجابة ... شكرا على المعلومات ... ps -p 1 -o comm = هو الخيار الأفضل لهذا السؤال. - Gangadhar
لا نحتاج إلى شوطين للاحتفاظ بالرؤوس ، بل نستخدمهما بدلاً من ذلك ps aux | awk 'NR==1 || $2==PID' ولا تحتاج أن تقول {print $0} لأنه الافتراضي. ولكن كما علقت ، -p أفضل على أي حال. - dave_thompson_085


Simmilar ل جواب slhck، ولكن الاعتماد على عمليات الملف بدلا من دعوات القيادة:

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

2
2017-08-30 23:31



[Ubuntu 14.04.4 LTS] cat /proc/1/comm => init، not / sbin / init. إجابته لديه نسخة أطول المدرجة. لكن +1 على أي حال. - OmarOthman


من المستغرب ، لا أحد قد ذكر الخيار -f (الأمر الكامل) ل ps. أحب استخدامه مع -e (كل شيء) وتوجيه النتائج إلى grep حتى أتمكن من تضييق البحث.

ps -ef | grep <PID>

وهذا مفيد أيضًا للنظر في الأوامر الكاملة التي يشغلها شخص ما والتي تستهلك الكثير من الموارد على نظامك. هذا سوف يعرض لك الخيارات والقيم التي تم تمريرها إلى الأمر.


2
2018-02-23 21:47



لا يعمل على BSD (ربما بما في ذلك MacOSX؟ لست متأكداً). حتى أين -e -f تتوفر، grep يمكن أن تنتج العديد من التطابقات الخاطئة على سبيل المثال. grep 33 يتضمن الرقم الداخلي = 933 أو 339 ، أو ppid = 33 أو 933 أو 339 ، أو timeused من 33 ثانية أو 33 دقيقة ، أو programname أو وسيطة تحتوي على 33 - بما في ذلك grep بحد ذاتها. الكل (AFAIK) ps يعمل -p، اذن فقط ps -fp 33. - dave_thompson_085