मैं एक चलने की प्रक्रिया के निरपेक्ष मार्ग को कैसे जान सकता हूं?


93

यदि मेरे पास डिस्क पर एक ही एप्लिकेशन की कई प्रतियां हैं, और केवल एक ही चल रहा है, जैसा कि मैं देख psसकता हूं, तो मैं इसे दूसरों से अलग करने का निरपेक्ष मार्ग कैसे जान सकता हूं ?

जवाबों:


110
% sudo ls -l /proc/PID/exe

उदाहरण के लिए:

% ps -auxwe | grep 24466
रूट 24466 0.0 0.0 1476 280? एस 2009 0:00 पर्यवेक्षण sshd
% sudo ls -l / proc / 24466 / exe
lrwxrwxrwx 1 रूट रूट 0 फ़रवरी 1 18:05 / proc / 24466 / exe -> / package/admin/daemontools-0.76/command/supervise

1
मेरे सिस्टम में (ubuntu 14.04) आपको lsकमांड चलाने के लिए सुपरयुसर होने की जरूरत नहीं है ।
जर्नो

3
@jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied- यह lsकमांड चलाने के बारे में नहीं है , यह प्रक्रिया से संबंधित प्रक्रिया की जानकारी तक पहुँचने के बारे में है जो आपसे संबंधित नहीं है। मेरे बॉक्स में, / proc में सूचीबद्ध सभी प्रक्रियाओं का लगभग 97% रूट प्रोसेस हैं, और अन्य 11 अलग-अलग उपयोगकर्ताओं में वितरित किए गए हैं।
इरफै

20

उपयोग:

pwdx $pid

यह आपको वर्तमान कार्य निर्देशिका प्रदान करता है, न कि इसका पूर्ण पथ।

आमतौर पर whichकमांड आपको बताएगा कि किस शेल से मंगवाया गया है:

#> which vlc
/usr/bin/vlc

3
इस उत्तर को और अधिक
बढ़ाने की

8
@ Kokizzu नहीं, यह नहीं है क्योंकि यह सवाल का जवाब बिल्कुल नहीं है। कौन सी कमांड केवल आपको बताती है कि यदि आप कमांड को निष्पादित करते हैं तो कौन सा बाइनरी चलाया जाएगा। सवाल था "कौन सा बाइनरी पहले से ही वहां चल रहा है"। उदाहरण के लिए कल्पना करें कि आपके कंप्यूटर पर एक दर्जन से अधिक jdks हैं। यदि आप एक चल रही जावा प्रक्रिया के लिए जानना चाहते हैं कि यह किस jdk से ली गई है, जो आपकी मदद नहीं करती है। यह केवल आपको बताएगा कि इसे किस jdk से लिया जाएगा, यदि आप इसे अभी निष्पादित करते हैं। स्वीकृत उत्तर भी सही है।
noamik

एक स्पष्ट तरीका यह उत्तर गलत है: मेरी मशीन पर मैं विभिन्न जेडीके संस्करणों और कुछ 32 बिट्स / 64 बिट्स के साथ प्रक्रियाएं चलाता हूं। अगर मैं इस प्रक्रिया के लिए सही jstack / jmap संस्करण की पहचान करना चाहता हूं तो ऊपर दिए गए उत्तर काम नहीं करेंगे जबकि स्वीकृत उत्तर होगा।
डैनियल दा कुन्हा

@Kokizzu यह केवल इस सवाल का जवाब देता है, "प्रक्रिया की वर्तमान कार्यशील निर्देशिका क्या है $pid?" संपादित पोस्ट अभी भी सवाल का जवाब नहीं देता है। whichकेवल यह बताता है कि "यदि आज्ञा मार्ग पर है, तो यह क्या है?"
जॉन स्ट्रॉड

pwdxमुझे redhat x64 6.3 पर pid पर निर्भर करते हुए प्रक्रिया के बाहरी प्रोग्राम का निरपेक्ष पथ लौटाएं।
निक डोंग

14

एक तरीका ps -ef है


5
एक विशिष्ट सेवा के लिए काम नहीं किया, यह सिर्फ सापेक्ष पथ प्रदान करता है
Jader Dias

मुझे इसके साथ शुरू की गई कमांड के माध्यम से एक प्रक्रिया को पहचानने में मदद मिली।
जिपरसन

6

1
मेरे लिनेक्स पर सभी पूर्ण योग्य पथ नहीं दिखाते हैं: "रूट 24466 0.0 0.0 1476 280? एस 2009 0:00 सुपरवाइज़ sshd" उदाहरण के लिए
akira

यह अन्य उत्तरों की तुलना में अधिक सटीक है ... शायद उतना उपयोगी नहीं है, लेकिन अधिक सही उत्तर है। Upvoted।
जॉन हंट

2

त्वरित उत्तर psविकल्प या /procफाइल सिस्टम जानकारी के साथ उपयोग करना है । यह आमतौर पर काम करेगा , लेकिन इसकी गारंटी नहीं है। सामान्य तौर पर, कोई निश्चित, गारंटीकृत उत्तर नहीं है। उदाहरण के लिए, यदि निष्पादन के दौरान निष्पादन फ़ाइल हटा दी जाती है तो क्या होगा, ताकि फ़ाइल का कोई रास्ता न हो?

थोड़ा और अधिक विस्तार के लिए यूनिक्स एफएक्यू देखें , विशेष रूप से सवाल 4.3 और 4.4।


2

हर कोई आपसे पीआईडी ​​जानने की उम्मीद क्यों करता है? यहाँ मानव-अनुकूल तरीका है:

pwdx `pgrep ###process_name###`

प्रश्न में कहा गया है, "जैसा कि मैं देख सकता हूं ps", इसलिए यह संभवतः PID
Scz

आह ठीक है सच मैं अभी भी अपने उपयोग के कई मामलों में एक तेज एक लाइनर होना चाहता हूं।
मूडबूम

1

lsof एक विकल्प है। आप नीचे कुछ कोशिश कर सकते हैं:

lsof -p PROCESS_ID

यह निष्पादन योग्य वास्तविक स्थान सहित प्रक्रिया द्वारा खोली गई सभी फाइलों को सूचीबद्ध करेगा। फिर कुछ और awk, cut, grep इत्यादि को जोड़ना संभव है ताकि आप जो जानकारी ढूंढ रहे हैं वह पता चल सके।

एक उदाहरण के रूप में, मैंने अपनी 'जावा' प्रक्रिया की पहचान करने के लिए निम्नलिखित आदेशों को निष्पादित किया:

lsof -p 12345 | awk '{प्रिंट $ NF}' | grep 'जावा $'


यह पहले से ही पोस्ट किए गए उत्तरों से बिल्कुल अलग कैसे है?
दलाल रस आईटी

0

आप उपयोग कर सकते हैं

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

या

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

पूर्ण मार्ग पाने के लिए। PID प्रक्रिया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.