लिनक्स में पीआईडी ​​का उपयोगकर्ता नाम कैसे खोजें


17

क्या आप मुझे पीआईडी ​​के उपयोगकर्ता नाम को खोजने में मदद कर सकते हैं, कुछ समय में मेरे सर्वर को उच्च भार मिला। जब मैं टॉप -c करता हूं, तो मुझे पीआईडी ​​का उपयोगकर्ता नाम भी नहीं मिल सकता है, जो सर्वर पर लोड कर रहा है।


हम बल्क php प्रक्रिया के कारण सर्वर लोड की समस्या का सामना कर रहे थे, ताकि मेरा यह प्रश्न हो, हम तब 'lsof -p xxxx' का उपयोग करके उन्हें पा सकते हैं।
रंजीथकुमार टी

जवाबों:


31

मुझे आश्चर्य है कि किसी ने भी इसे अभी तक नहीं लगाया है:

कमांड के -pविकल्प का प्रयास करें ps

उदाहरण के लिए, यदि आपके पास पीआईडी ​​है 1234, तो दौड़ें:

ps -u -p 1234

( -uआउटपुट में उपयोगकर्ता नाम शामिल करने के लिए जोड़ा गया था)

आप अपनी इच्छित जानकारी निकालने के लिए उपयोग grepया awkआदि कर सकते हैं।


1
तुम मुझसे ज्यादा तेज एक टिक थे। आप पहले जाग रहे हैं? लिनक्स डिस्टर्बेंस के आधार पर, ps u 1234(डेबियन) या सिर्फ ps 1234(बिजीबॉक्स वाला एंड्रॉइड) भी काम करता है।
ott--

5

/proc/processID/status उपयोगकर्ता की आईडी के बारे में जानकारी होगी जिसका उपयोग आप उपयोगकर्ता नाम खोजने के लिए कर सकते हैं।

यह वही करता है:

uid=$(awk '/^Uid:/{print $2}' /proc/YOUR_PROCESS_ID/status)
getent passwd "$uid" | awk -F: '{print $1}'

अपनी प्रक्रिया आईडी नंबर के साथ Your_PROCESS_ID बदलें।


3

PID से केवल उपयोगकर्ता नाम प्राप्त करें:

PID=136323
USERNAME="$( ps -o uname= -p "${PID}" )"

आप इसे एक के साथ भी जोड़ सकते हैं pgrep। इस उदाहरण में हम कुछ .phpफ़ाइल को निष्पादित करने वाले सभी उपयोगकर्ता दिखाते हैं :

pgrep -f '\.php' | xargs -r ps -o uname= -p | sort -u

केवल एक उपयोगकर्ता नाम खोजें जो एक विशिष्ट अनूठी प्रक्रिया चला रहा है:

USERNAME="$( pgrep -nf 'script\.php' | xargs -r ps -o uname= -p )

1

आप सही में क्या चाहते हैं? अपने सिस्टम पर, अगर मैं 'टॉप -c' चलाता हूं तो मुझे यह मिलता है:

  PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND                                                                                                                        
  2873 matt      20   0 3022m 1.6g 1.6g S     22 21.6   2245:42 /usr/lib/virtualbox/VirtualBox --comment ESX5-1 --startvm 4fd78ee9-739a-4d53-a0ce-4f9819ab9411 --no-startvm-errormsgbox        
  29764matt      20   0 2779m 1.4g 1.3g S      5 18.4 210:33.51 /usr/lib/virtualbox/VirtualBox --comment win2008-2 --startvm 202ec2b7-ae12-40e9-af76-2be429e553d7 --no-startvm-errormsgbox     
  17281root      20   0     0    0    0 S      2  0.0   0:05.90 [kworker/u:2]                                                                                                              

तो पीआईडी ​​(प्रोसेसस / टास्क आइडेंटिफ़ायर) पहला कॉलम है, और उपयोगकर्ता खाता है जो प्रक्रिया के तहत चलता है, वह दूसरा कॉलम है


1

मुझे लगता है कि सबसे छोटा तरीका है:

id -nu </proc/<pid>/loginuid

/proc/<pid>/loginuidफ़ाइल प्रक्रिया करने वाले उपयोगकर्ता की यूआईडी नंबर है; id -nuस्टड से uid पढ़ता है और एक उपयोगकर्ता नाम लौटाता है।


अच्छा लगा। क्या उपयोगकर्ता नामों के लिए यूआईडी की एक फाइल है जिसे आप लॉगिन यूजर को एक स्ट्रिंग उपयोगकर्ता नाम में मैप कर सकते हैं?
कोरी रॉबिन्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.