หากฉันมีหลายแอปพลิเคชันเดียวกันบนดิสก์และมีเพียงแอปพลิเคชันเดียวที่ฉันสามารถดูได้ps
ฉันจะทราบเส้นทางสัมบูรณ์เพื่อแยกความแตกต่างจากที่อื่นได้อย่างไร
หากฉันมีหลายแอปพลิเคชันเดียวกันบนดิสก์และมีเพียงแอปพลิเคชันเดียวที่ฉันสามารถดูได้ps
ฉันจะทราบเส้นทางสัมบูรณ์เพื่อแยกความแตกต่างจากที่อื่นได้อย่างไร
คำตอบ:
% sudo ls -l /proc/PID/exe
เช่น:
% ps -auxwe | grep 24466 รูท 24466 0.0 0.0 1476 280 S 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
ls: cannot read symbolic link /proc/28783/exe: Permission denied
- ไม่เกี่ยวกับการเรียกใช้ls
คำสั่ง แต่เกี่ยวกับการเข้าถึงข้อมูลกระบวนการของกระบวนการที่ไม่ได้เป็นของคุณ ในกล่องของฉันประมาณ 97% ของกระบวนการทั้งหมดที่ระบุไว้ใน / proc เป็นกระบวนการรูท
ใช้:
pwdx $pid
สิ่งนี้ให้ไดเรกทอรีการทำงานปัจจุบันของ pid ไม่ใช่พา ธ สัมบูรณ์
โดยปกติแล้วwhich
คำสั่งจะบอกคุณว่ากำลังถูกเรียกใช้จากเชลล์:
#> which vlc
/usr/bin/vlc
$pid
คืออะไร" โพสต์ที่แก้ไขแล้วยังไม่ตอบคำถาม which
เพียงแค่บอกว่า "ถ้าคำสั่งอยู่บนเส้นทางแล้วมันคืออะไร"
pwdx
กลับฉันเส้นทางที่แน่นอนของโปรแกรม exectuable ของกระบวนการขึ้นอยู่กับ pid ใน redhat x64 6.3
วิธีหนึ่งคือ ps -ef
ps auxwwwe
ที่มา:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
คำตอบอย่างรวดเร็วคือใช้ps
กับตัวเลือกหรือ/proc
ข้อมูลระบบไฟล์ ซึ่งมักจะใช้งานได้ แต่ไม่รับประกัน โดยทั่วไปไม่มีคำตอบที่แน่นอนและรับประกันได้ ตัวอย่างเช่นจะเกิดอะไรขึ้นถ้าไฟล์เรียกทำงานถูกลบระหว่างการดำเนินการเพื่อให้ไม่มีเส้นทางไปยังไฟล์
ดูUnix FAQสำหรับรายละเอียดเพิ่มเติมเล็กน้อยโดยเฉพาะคำถามที่ 4.3 และ 4.4
lsof เป็นตัวเลือก คุณสามารถลองทำสิ่งต่อไปนี้:
lsof -p PROCESS_ID
นี่จะแสดงรายการไฟล์ทั้งหมดที่เปิดโดยกระบวนการรวมถึงตำแหน่งจริงของไฟล์เรียกทำงาน จากนั้นเป็นไปได้ที่จะเพิ่ม awk, cut, grep และอื่น ๆ อีกเล็กน้อยเพื่อค้นหาข้อมูลที่คุณต้องการ
ตัวอย่างฉันใช้คำสั่งต่อไปนี้เพื่อระบุว่า 'java' กระบวนการของฉันมาจากที่ใด:
lsof -p 12345 | awk '{พิมพ์ $ NF}' | grep 'java $'
คุณสามารถใช้
readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe
หรือ
find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"
เพื่อให้ได้เส้นทางที่แน่นอน PID เป็นกระบวนการ
ls
คำสั่ง