เป็นไปได้ที่จะได้รับชื่อไฟล์ของกระบวนการโดยใช้ PID หรือไม่? ps แสดงข้อมูลที่เป็นประโยชน์มากมายเกี่ยวกับกระบวนการ แต่ไม่ได้มีคำใบ้เกี่ยวกับตำแหน่งของไฟล์ที่ประมวลผล
เป็นไปได้ที่จะได้รับชื่อไฟล์ของกระบวนการโดยใช้ PID หรือไม่? ps แสดงข้อมูลที่เป็นประโยชน์มากมายเกี่ยวกับกระบวนการ แต่ไม่ได้มีคำใบ้เกี่ยวกับตำแหน่งของไฟล์ที่ประมวลผล
คำตอบ:
วิธีการหนึ่งของการตั้งไบนารีของกระบวนการคือการใช้งานlsof
และgrep
เป็นครั้งแรกtxt
ส่วน ยกตัวอย่างเช่นในเปลือกเพื่อดูสิ่งที่ binary เปลือกคือใช้เปลือก PID $$
ในสถานที่ของ
$ lsof -p $$ | grep txt
bash 78228 blair txt REG 14,2 1244928 6568359 /bin/bash
bash 78228 blair txt REG 14,2 1059792 23699809 /usr/lib/dyld
bash 78228 blair txt REG 14,2 136368128 81751398 /private/var/db/dyld/dyld_shared_cache_i386
คุณสามารถเห็นได้ว่าเชลล์ใช้งาน/bin/bash
อยู่
เทคนิคนี้ใช้งานได้หากกระบวนการถูกเรียกใช้โดยใช้พา ธ สัมบูรณ์หรือสัมพัทธ์ ตัวอย่างเช่นเข้าไปในหนึ่งเชลล์และทำงาน
$ sleep 1234567
และการใช้งานps
ในเชลล์อื่นแสดงให้เห็นว่ามันเปิดตัวอย่างไร:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
ใช้lsof
แสดงให้เห็นว่ามันวิ่งไบนารี:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
ฉันมี MacPorts coreutils + with_default_names ติดตั้งซึ่งจะอธิบายว่าผมหยิบขึ้นมาและไม่ได้gsleep
/bin/sleep
ตัวอย่าง: คุณอยู่หลังชื่อคำสั่งกระบวนการเชื่อมโยงสำหรับPID 45109
...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ลอง ps aux
ps -ef กับ grep ใช้ได้สำหรับฉัน สำหรับชื่อไฟล์เฉพาะให้ไพพ์ผ่าน grep ดังนี้:
MacBook:~ Me$ ps -ef | grep Safari | grep -v grep
501 15733 301 0 0:25.76 ?? 1:58.24 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_4977855
(สุดท้ายนั้น 'grep -v grep' เพียงแค่หยุดคุณได้รับคำสั่ง grep ของคุณเองในผลลัพธ์)
ps -p <pid> - คำสั่ง
L1A1:~ a1155344$ ps -p1 -Ocommand
PID TT STAT TIME COMMAND
1 ?? Ss 0:02.26 /sbin/launchd
; exit
หลังคำสั่งการพิมพ์เพื่อให้เฉพาะtxt
รายการแรกเท่านั้นที่จะพิมพ์แม้ว่าจะมีหลายรายการในตัวอย่าง bash