যদি আমি কোনও প্রক্রিয়ার পিআইডি নম্বর জানি, তবে আমি কীভাবে এর নামটি পেতে পারি?


263

যদি কোনও প্রক্রিয়াটির জন্য আমার কাছে পিআইডি নম্বর থাকে (একটি ইউএনআইএক্স মেশিনে), তবে আমি কীভাবে এর সম্পর্কিত প্রক্রিয়াটির নামটি জানতে পারি?

আমাকে কি করতে হবে?


9
আপনি psবা ব্যবহার করতে পারেনls -l /proc/$PID/exe
এডি_এমি

1
@ এডি_ইম আপনাকে এক্সিকিউটেবল ফাইল দেবে যা সর্বদা প্রক্রিয়াটির নাম নয়। এছাড়াও, এটি পোর্টেবল নয় ...
ডার্বার্ট

9
ps -fp PIDপূর্ণ কমান্ড দেখাবে
তেমনাক

উত্তর:


283

সমস্ত POSIX- অনুবর্তী সিস্টেমগুলিতে এবং লিনাক্স সহ আপনি ব্যবহার করতে পারেন ps:

ps -p 1337 -o comm=

এখানে, প্রক্রিয়াটি তার পিআইডি দিয়ে নির্বাচন করে -p-oবিকল্প আউটপুট ফরম্যাট নির্দিষ্ট করে, commকমান্ড নাম, যার অর্থ।

আরও দেখুন: ps- ওপেন গ্রুপ বেস স্পেসিফিকেশন ইস্যু 6


28
কম কম্যান্ডটি 15 টি অক্ষরে ছাঁটাইয়াছে বলে মনে হচ্ছে। commandপরিবর্তে ব্যবহার করে এটি স্থির করে।
নিমো

1
[উবুন্টু 14.04.4 LTS] $ ps -p 1 -o comm= Init $ ps -p 1 -o command= / sbin / init; যার অর্থ এটি প্রায় 15 টি অক্ষর নয়, সম্ভবত বাইনারিটির নাম বনাম এর সম্পূর্ণ পথ।
ওমরথম্যান

3
আসলে, commবাইনারিটির নাম দেয় এবং commandআর্গুমেন্ট 0 দেয়
রবি

45

আপনি প্রক্রিয়া নাম বা প্রক্রিয়া-আইডি বা পিড থেকে ব্যবহৃত কমান্ড খুঁজে পেতে পারেন

/proc/pid/cmdline

করেছে

cat /proc/pid/cmdline

এখানে পিডটি হ'ল পিড যার জন্য আপনি এক্সপ্লেরিয়ালের জন্য নামটি খুঁজতে চান
:

 # 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

14
সতর্কতা অবলম্বন করুন: ওপি ইউনিক্সের উল্লেখ করেছে। সমস্ত ইউনিক্স প্রক্রিয়া-নির্দিষ্ট ফাইলের মতো পরিকল্পনা 9 বাস্তবায়ন করে না। আপনার উত্তরটি সাধারণত লিনাক্সের ক্ষেত্রে প্রযোজ্য।
slhck

3
যদিও এটি সত্য, তারা "লিনাক্স" প্রশ্নটি ট্যাগ করেছিল। যে কেউ লিনাক্স ভিত্তিক ইউনিক্স ওএস ব্যবহার করছে সেগুলি তাদের প্রয়োজনীয়তার সাথে উত্তরগুলি সংশোধন করতে যথেষ্ট
অ্যান্ড্রু হোয়াইট

14

কোনও নির্দিষ্ট পিড ব্যবহার করে প্রোগ্রামটির পথ পেতে আপনি ব্যবহার করতে পারেন:

ps ax|egrep "^ [PID]"

বিকল্পভাবে আপনি ব্যবহার করতে পারেন:

ps -a [PID]

এখানে চিত্র বর্ণনা লিখুন


1
ps -aটার্মিনালের সাথে সম্পর্কিত সমস্ত প্রক্রিয়াগুলির তালিকা তৈরি করুন, এটি কোনও ইনপুট নেয় না।
মাইকেল লি

@ মিশেললি আমি অনুমান করি যে এটি ঠিকঠাক কাজ করে psসংস্করণে নির্ভরশীল procps version 3.2.7
পেড্রো লোবিটো 13

8
# 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

এই এক নিখুঁত।
জয়য়ারজো

1
সম্ভবত ভাল: readlink /proc/1337/exe। রিডলিঙ্ক - সমাধান করা প্রতীকী লিঙ্কগুলি বা ক্যানোনিকাল ফাইলের নাম মুদ্রণ করুন।
পাবলো এ

8

আপনি পিএমএপ ব্যবহার করতে পারেন। আমি পিআইডি 6649 অনুসন্ধান করছি And এবং অতিরিক্ত প্রক্রিয়া বিশদটি কেটে দিচ্ছি।

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

এই কমান্ডটি আমার প্রয়োজনের তুলনায় আমাকে আরও বেশি সহায়তা করেছে, প্রক্রিয়াটি শুরু হওয়ার আমার সম্পূর্ণ লাইন আছে। একটি জাভা প্রক্রিয়া দেওয়া হয়েছে, psকমান্ডের সাহায্যে আপনি যা দেখবেন তা সবই ঠিক আছে java, তবে বাকি পরামিতিগুলি সম্পূর্ণরূপে প্রদর্শিত হবে pmap
ড্যানিয়েল আন্দ্রে মিনসি

3

আপনি পিএস এর সাথে মিশ্রিত করেও 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

2
এটি অস্থির কারণ এটি কমান্ডের যে কোনও জায়গায় নম্বর অন্তর্ভুক্ত করার জন্য এমন প্রক্রিয়াগুলিও নির্বাচন করবে। উদাহরণস্বরূপ, ps ax | grep 1বাস্তবে এটি initপ্রক্রিয়াটি ফিরে আসে কিনা তা চেষ্টা করে দেখুন । (আমার ক্ষেত্রে এটি 119 টি লাইন
প্রত্যাখ্যান করে

1
@ এসএলএইচসি উত্তরটি সংশোধন করেছে ... তথ্যের জন্য ধন্যবাদ .. এই প্রশ্নের জন্য পিএস- পি 1-কম কম = সেরা বিকল্প।
গঙ্গাধর

হেডার ধরে রাখতে আমাদের দুটি রান দরকার নেই, পরিবর্তে ব্যবহার করুন ps aux | awk 'NR==1 || $2==PID'- এবং {print $0}এটি বলার দরকার নেই কারণ এটি ডিফল্ট। আপনি যেমন মন্তব্য করেছেন তবে -pতা আরও ভাল।
ডেভ_থমসসন_085

3

থেকে Simmilar slhck এর উত্তর কিন্তু কমান্ড আমন্ত্রণ পরিবর্তে ফাইল অপারেশন উপর নির্ভর:

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

[উবুন্টু 14.04.4 এলটিএস] cat /proc/1/comm=> আরবি, এসবিএন / আরআইএন নয়। তার উত্তরটির দীর্ঘতর সংস্করণ অন্তর্ভুক্ত রয়েছে। তবে যাইহোক +1 করুন।
ওমরথম্যান

2

আশ্চর্যজনকভাবে, কেউ পিএস-এর জন্য -f (পূর্ণ কমান্ড) বিকল্পটি উল্লেখ করেনি। আমি এটি (সমস্ত) দিয়ে ব্যবহার করতে এবং ফলাফলগুলি গ্রেপ করতে পাইপ করতে চাই যাতে আমি আমার অনুসন্ধানকে সংকীর্ণ করতে পারি।

ps -ef | grep <PID>

আপনার সিস্টেমে প্রচুর সংস্থান নিচ্ছে এমন কেউ চলছে এমন সম্পূর্ণ কমান্ডগুলি দেখার জন্য এটি খুব দরকারী। এটি আপনাকে কমান্ডের কাছে দেওয়া বিকল্পগুলি এবং যুক্তি প্রদর্শন করবে।


3
BSD এ কাজ করে না (সম্ভবত ম্যাকোএসএক্স সহ? আমি নিশ্চিত নই) এমনকি যেখানে -e -fউপলভ্য রয়েছে, সেখানে grepঅনেকগুলি মিথ্যা ম্যাচ উত্পাদন করতে পারে যেমন grep 33পিড = 933 বা 339, পিপিড = 33 বা 933 বা 339, সময়সীমা ৩৩ সেকেন্ড বা ৩৩ মিনিট, বা প্রোগ্রামের নাম বা যুক্তি যুক্ত রয়েছে - যার মধ্যে রয়েছে grepনিজেই। সমস্ত (এএফাইক) psআছে -p, তাই ঠিক ps -fp 33
ডেভ_থমসসন_085

0

নিম্নলিখিত কমান্ডটি সহ আমি সবচেয়ে সহজ পদ্ধতিটি পেয়েছি:

ps -awxs | grep pid

তুলনায় ps -p${pid}চূড়ান্তভাবে অদক্ষ হওয়া ছাড়াও এটি প্রচুর পরিমাণে মিথ্যা ইতিবাচকতা গ্রহণ করবে - grepনিজেই সহ ।
টবির স্পিড

0

পিআইডি সন্ধানের জন্য সহজ স্ক্রিপ্ট তৈরি করেছে এবং ব্যাশ স্ক্রিপ্টগুলির মধ্যে
ব্যবহার করুন ... সাবধানতার সাথে ব্যবহার করুন !!

স্ক্রিনশট: http://pastebin.com/Cm9YH67U
স্ক্রিনশট



আঁদ্রে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.