क्या एक चल रहे कार्यक्रम का मार्ग खोजना संभव है?


17

मेरे पास एक xmms2dप्रक्रिया चल रही है, लेकिन दो संभव निष्पादन योग्य फाइलें (विभिन्न निर्देशिकाओं में, निष्पादन योग्य मार्ग में दोनों) जो इसे जन्म दे सकती हैं। मुझे संदेह है कि उनमें से एक भ्रष्ट है, क्योंकि कभी-कभी यह कार्यक्रम काम करता है और कभी-कभी ऐसा नहीं होता है। अब चल रही प्रक्रिया काम करती है, इसलिए मैं दूसरे को हटाना (या नाम बदलना) चाहता हूं।

ps ax|grep "xmms"8505 ? SLl 2:38 xmms2d -vपथ जानकारी के बिना रिटर्न । पीआईडी ​​को देखते हुए, क्या मुझे पता चला कि क्या इसे चलाया गया था /usr/bin/xmms2dया /usr/local/bin/xmms2d?

धन्यवाद!


2
ps -C xmmsअपने grep को अप्रचलित बनाना चाहिए।
उपयोगकर्ता अज्ञात

1
pgrep इसे भी करेगा।
जलेगीरे

जवाबों:


22

इसे इस्तेमाल करे:

ls -l /proc/8505/exe

या यदि आप के उत्पादन को पार्स नहीं करना चाहते हैं ls, तो बस करें:

readlink /proc/8505/exe

या

realpath /proc/8505/exe

6

यदि आप सोलारिस चला रहे हैं, तो रास्ता सुझाए गए लिनक्स से थोड़ा अलग है:

$ for i in $(pgrep bash)
do
  printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
   577 /usr/bin/bash
 11247 /usr/bin/bash
 13921 /usr/bin/bash
 13992 /tmp/bash

क्या आप चल रही प्रक्रियाओं की वर्तमान कार्य निर्देशिका जानना चाहते हैं, आप इसका उपयोग कर सकते हैं:

pwdx $(pgrep xmms)

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

$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp

(मेरी टिप्पणी को हटा दिया गया क्योंकि यह आपके संपादन के बाद लागू नहीं हुआ :)
Kjetil Jorgensen

-1

मैं शेल से माउसपैड शुरू करता हूं:

mousepad & 
[1] 24289

जाँच करें, यह कहाँ से आता है:

which mousepad 
   /usr/bin/mousepad

इसे पथ से शुरू करें:

/usr/bin/mousepad &

ps के माध्यम से देखो:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

जैसा कि हम देखते हैं, पथ के बिना आह्वान किया गया पथ के बिना प्रदर्शित किया जाता है, और पथ के साथ शुरू होता है, और इसलिए इसके द्वारा पाया जाना चाहिए

which mousepad

उस के रूप में सरल, है ना? रुको! अगर मैं मेनू से माउसपैड शुरू करूँ तो क्या होगा? खैर, इसे PATH सेटिंग्स का उपयोग किए बिना या उसके बिना निर्दिष्ट किया जा सकता है। मैंने कोशिश की। एक सामान्य शुरुआत एक साधारण 'माउसपैड' की ओर ले जाती है ps v -C। चूँकि ~ / बिन मेरे PATH का पहला भाग है, मैं वहाँ एक डमी बनाता हूँ, और वसीला, मेनू से डमी शुरू की जाती है।

लेकिन क्या होगा यदि आप एक कार्यक्रम शुरू करते हैं जो खुद को हटा देता है? जो हटाए गए प्रोग्राम को नहीं ढूंढेगा और एक गलत रिपोर्ट करेगा, अगर रास्ते में कोई दूसरा है।

तो यह एक दौड़ की स्थिति है। यदि आप जानते हैं कि आपके कार्यक्रम की जांच करते समय आपके कार्यक्रम स्वयं को नहीं हटाते हैं या स्थानांतरित नहीं किए जाते हैं, ps v -C NAMEऔर which NAMEउन्हें बहुत अच्छी तरह से काम करना चाहिए।


क्या यह हमेशा काम करेगा? मान लीजिए कि मेरे पास दो अलग-अलग निर्देशिकाओं में एक निष्पादन योग्य है और मैं ./someexecutableदोनों में चलता हूं ?
अपूर्व ०२०

नहीं, बिल्कुल नहीं, क्योंकि दोनों के रूप में दिखाई देगा ./someexecutable या / bin / bash ./someexecutable
उपयोगकर्ता अज्ञात

-4

आगे बढ़ो और दोनों फ़ाइलों को हटा दें (बल -फ विकल्प के बिना)। जो फाइल डिलीट हो जाती है वो है, जो नहीं चल रही थी !!

सिस्टम निष्पादन योग्य फ़ाइल लॉकिंग आपको किसी भी फ़ाइल को हटाने की अनुमति नहीं देगा जो वर्तमान में निष्पादन में है।


आपका उत्तर प्रश्न का वास्तविक उत्तर प्रदान नहीं करता है।
रिस्तो सलमिनन

4
यह भी गलत है। आप बिना किसी समस्या के चल रहे निष्पादनयोग्य को हटा सकते हैं। आपको कैसे लगता है कि जैसे पैकेज init, जो हमेशा चालू रहते हैं, अपग्रेड होते हैं? आप चल रहे निष्पादन योग्य को संशोधित नहीं कर सकते ।
पैट्रिक

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