หากฉันเห็นกระบวนการทำงานโดยใช้ ps ฉันจะค้นหาไฟล์เรียกทำงานได้อย่างไร


11

หากฉันเห็นกระบวนการทำงานโดยใช้ps -eฉันจะหาไฟล์ที่เปิดตัวได้อย่างไร


2
นี่คือระบบปฏิบัติการอะไร Linux, BSD, Solaris ...
Patrick

linux ... ยินดีต้อนรับ แต่โซลูชันของ cross-unix
interstar

คำตอบ:


15

บน Linux: ถ้าคุณรู้จัก PID คุณสามารถ cat ไฟล์ cmdline สำหรับไฟล์นั้น เช่น:

cat /proc/PID/cmdline

สิ่งนี้อาจจะล้มเหลวหากไบนารีถูกย้ายหลังจากโปรแกรมเริ่มทำงาน

และแน่นอนว่า:

lsof -n | grep PID | grep ' txt '

และ:

ls -la /proc/PID/exe

ซึ่งเป็นลิงก์สัญลักษณ์ไปยังไฟล์ที่เรียกทำงานได้


1
โปรดทราบว่า/proc/PID/cmdlineไม่มีอักขระขึ้นบรรทัดใหม่ดังนั้นคุณอาจต้องการทำเช่นcat /proc/PID/cmdline ; echo ''นั้น
Keith Thompson

ที่จริงแล้วมันมีอักขระ NUL คั่นอาร์กิวเมนต์ดังนั้นคุณอาจต้องการบางสิ่งที่ซับซ้อนยิ่งขึ้นเช่นtr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson

2

คัดลอก id กระบวนการจากps -eคำสั่งแล้วเรียกใช้ต่อไปนี้:

ps x | grep <process-id>

จะไม่ล้มเหลวหากแอปพลิเคชันแก้ไข argv [0]? iirc sendmail ทำเช่นนั้น
Folkert van Heusden

ใช่มันเป็นความน่าจะเป็น ไม่น้อยสิ่งนี้มีประโยชน์เกือบทุกครั้ง
Aditya Patawari

0

ไม่มีวิธีการ ( ls, lsofหรือcat) ในคำตอบอื่น ๆ ทำงานสำหรับฉัน ถ้าฉันทำ:

$ nano test.txt

นี่คือผู้ชนะของฉัน:

$ pgrep -f -l test
3074 nano test.txt

หรือเพื่อให้ได้รับ PID เท่านั้นที่จะใช้ในการเขียนโปรแกรม:

$ pgrep -f test
3074

ทดสอบบน Kali Linux v1.0.6 (ใช้เป็นเดเบียน)
เปรียบเทียบกับแบบง่าย ๆlsฉันต้องยอมรับว่ามันไม่ใช่โซลูชันแบบพกพา แต่อย่างน้อยก็ใช้งานได้

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