เป็นไปได้ไหมที่จะหาเส้นทางของโปรแกรมที่กำลังรันอยู่?


17

ฉันมีxmms2dกระบวนการทำงาน แต่ไฟล์ปฏิบัติการที่เป็นไปได้สองไฟล์ (ในไดเรกทอรีที่แตกต่างกันทั้งในเส้นทางปฏิบัติการ) ที่อาจเกิดขึ้นได้ ฉันสงสัยว่าหนึ่งในนั้นเสียหายเพราะบางครั้งโปรแกรมนี้ใช้งานได้และบางครั้งก็ใช้ไม่ได้ กระบวนการทำงานในตอนนี้ทำงานดังนั้นฉันต้องการลบ (หรือเปลี่ยนชื่อ) อีกอันหนึ่ง

ps ax|grep "xmms"ส่งคืน8505 ? SLl 2:38 xmms2d -vโดยไม่มีข้อมูลพา ธ รับ PID ฉันจะพบว่ามันถูกเรียกใช้จาก/usr/bin/xmms2dหรือ/usr/local/bin/xmms2dไม่?

ขอบคุณ!


2
ps -C xmmsควรทำให้ grep ของคุณล้าสมัย
ผู้ใช้ที่ไม่รู้จัก

1
pgrep ก็จะทำเช่นกัน
jlliagre

คำตอบ:


22

ลองสิ่งนี้:

ls -l /proc/8505/exe

หรือถ้าคุณไม่ต้องการแยกวิเคราะห์ผลลัพธ์ของlsเพียงแค่:

readlink /proc/8505/exe

หรือ

realpath /proc/8505/exe

6

หากคุณใช้งาน Solaris วิธีที่แตกต่างจาก Linux ที่แนะนำคือ:

$ 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 จากเปลือก:

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

อย่างที่เราเห็นสิ่งที่ถูกเรียกใช้โดยไม่มีพา ธ จะแสดงโดยไม่มีพา ธ และเริ่มต้นด้วย PATH และจะพบได้

which mousepad

ง่ายอย่างนั้นใช่ไหม รอ! จะเกิดอะไรขึ้นถ้าฉันเริ่ม mousepad จากเมนู ก็อาจมีการระบุว่ามีหรือไม่มีการใช้การตั้งค่าเส้นทาง ฉันเหนื่อย. นำไปสู่การเริ่มต้นปกติที่จะง่าย 'mousepad ps v -Cใน เนื่องจาก ~ / bin เป็นส่วนแรกของ PATH ของฉันฉันสร้างดัมมี่ที่นั่นและ voila ดัมมี่ก็เริ่มจากเมนู

แต่ถ้าคุณเริ่มโปรแกรมที่ลบเอง ซึ่งจะไม่พบโปรแกรมที่ถูกลบและรายงานผิดถ้ามีวินาทีในพา ธ

นั่นคือสภาพการแข่งขัน หากคุณรู้ว่าโปรแกรมของคุณไม่ลบตัวเองหรือไม่ถูกย้ายในขณะที่คุณกำลังตรวจสอบตำแหน่งของพวกเขาps v -C NAMEและwhich NAMEควรจะทำงานได้ดี


สิ่งนี้จะใช้ได้หรือไม่ สมมติว่าฉันมีปฏิบัติการในสองไดเรกทอรีที่แตกต่างกันและฉันทำงาน./someexecutableในทั้งสอง?
apoorv020

ไม่แน่นอนไม่ใช่เพราะทั้งคู่จะแสดงเป็น. /sexexecutable หรือ / bin / bash ./someexecutable
ผู้ใช้ที่ไม่รู้จัก

-4

ไปข้างหน้าและลบทั้งสองไฟล์ (ไม่มีตัวเลือก force -f) ไฟล์ที่ถูกลบคือไฟล์ที่ไม่ได้ทำงาน !!

การล็อคไฟล์ที่ปฏิบัติการได้ของระบบจะไม่อนุญาตให้คุณลบไฟล์ใด ๆ ที่อยู่ระหว่างการดำเนินการ


คำตอบของคุณไม่ได้ให้คำตอบที่แท้จริงสำหรับคำถาม
Risto Salminen

4
มันก็ผิด คุณสามารถลบไฟล์ที่รันได้โดยไม่มีปัญหา คุณคิดว่าแพ็กเกจเช่นinitซึ่งใช้งานเสมออัพเกรดเป็นอย่างไร คุณไม่สามารถแก้ไขไฟล์ที่รันได้
Patrick

1
นี่เป็นสิ่งที่ผิดอย่างน่าตกใจ - อย่าทำเช่นนี้
Michael Mrozek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.