แสดงกระบวนการที่กำลังรันด้วยชื่อไฟล์หรือไม่?


12

ฉันใช้ putty เพื่อเชื่อมต่อเซิร์ฟเวอร์ linux ของฉันซึ่งเป็นเว็บไซต์ของฉันฉันสามารถเรียกใช้

# ps aux | less

เพื่อแสดงกระบวนการทำงาน แต่ฉันต้องการแสดงไฟล์ที่เรียกใช้กระบวนการเหล่านี้

ฉันได้ลองแล้ว

# ps aux | grep <pid>

แต่รับข้อผิดพลาดนี้:

-bash: syntax error near unexpected token `newline'

วิธีที่ถูกต้องในการทำคืออะไร?


4
ในgrep <pid>คุณควรจะแทนที่<pid>ด้วยรหัสกระบวนการจริงของคุณ (มันเป็นตัวเลข) <pid>เป็นเพียงตัวยึดตำแหน่งไม่ใช่สิ่งที่คุณควรพิมพ์
Ben Voigt

คำตอบ:


13

ps aux | grep <pid>ไม่ใช่คำสั่งเชลล์ สัญกรณ์<pid>เป็นแบบแผนทั่วไปที่หมายถึง "วาง PID ที่นั่น" ตัวอย่างเช่นหาก PID คือ 1234 คุณจะps aux | grep 1234ได้รับ ps u 1234นี้ไม่ได้เป็นคำสั่งที่มีประโยชน์มากที่สุดเท่าที่จะให้คุณทำงานได้ดี

คำถามของคุณไม่ชัดเจน “ ชื่อไฟล์” หมายความว่าอย่างไร? หากคุณต้องการดูว่าสิ่งใดที่ปฏิบัติการได้กระบวนการ 1234 กำลังทำงานอยู่:

ls -l /proc/1234/exe

หากคุณต้องการดูไฟล์ที่กระบวนการเปิดอยู่:

ls -l /proc/1234/fd

หากคุณต้องการดูบรรทัดคำสั่งแบบเต็มพร้อมอาร์กิวเมนต์:

tr '\0' '\n' </proc/1234/cmdline

หากคุณต้องการใช้คำสั่งlsof -p1234แสดงไฟล์ทั้งหมดที่กระบวนการเปิด ps uww 1234แสดงข้อมูลชิ้นส่วนต่าง ๆ เกี่ยวกับกระบวนการ 1234 รวมถึงบรรทัดคำสั่งแบบเต็ม



3

ครั้งแรกของทั้งหมดps aux | grep <PID>จะเป็นประโยชน์เมื่อคุณต้องการที่จะแสดงรายละเอียดของกระบวนการที่เฉพาะเจาะจงที่มีPID(กระบวนการ Identifier) <PID>เป็นตัวแทนจาก

ตัวอย่างเช่น ( ps aux | grep 'firefox\|USER'หมายถึงพิมพ์เฉพาะบรรทัดที่มี contein firefoxหรือUSER):

ps aux | grep 'firefox\|USER'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
terdon  9021  2.5 11.8 1950888 970832 ?      Sl   Apr03 108:41 /opt/firefox/firefox

ดังนั้น PID สำหรับfirefoxอินสแตนซ์ของฉันคือ 9021 ดังนั้นหากต้องการใช้คำสั่งที่คุณพยายามเรียกใช้ฉันจะแทนที่<PID>ด้วย9021:

ps aux | grep 9021
terdon  9021  2.5 11.5 1948776 942640 ?      Sl   Apr03 109:03 /opt/firefox/firefox

ตอนนี้ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดย "แสดงไฟล์ที่เรียกใช้กระบวนการเหล่านี้" หากคุณหมายถึงแสดงไฟล์ที่กระบวนการเหล่านี้ใช้ps auxอยู่เป็นวิธีหนึ่งในการทำเช่นนั้น ว่าฉันได้เปิดไฟล์/usr/share/doc/nano/faq.htmlโดยใช้คำสั่งนี้:

 firefox /usr/share/doc/nano/faq.html 

ฉันสามารถดูไฟล์ที่firefoxเปิดโดยใช้ps:

ps aux | grep firefox
terdon   31763 18.7  1.0 682916 84352 pts/10   Sl+  17:10   0:02 firefox /usr/share/doc/nano/faq.html

ไฟล์ที่เปิดจะแสดงเป็นหนึ่งในข้อโต้แย้งที่ส่งผ่านไปยัง firefox โปรดทราบว่า PID นั้นแตกต่างกัน (ตอนนี้31763แทนที่จะเป็น9021) นั่นเป็นเพราะทุกโปรแกรมที่รันอยู่มี PID เฉพาะของตัวเอง


topอีกคำสั่งที่เป็นประโยชน์ หากคุณรันด้วย-cสวิตช์มันจะแสดงอาร์กิวเมนต์ที่ส่งไปยังคำสั่งและ-u <your user>จะแสดงเฉพาะกระบวนการที่เริ่มต้นด้วยชื่อผู้ใช้ของคุณ (แทนที่<your user>ด้วยชื่อผู้ใช้จริงของคุณ):

top -c -u terdon

นี่คือเอาต์พุตบนเครื่องโลคัลของฉัน (ผู้ใช้terdonรันเพียงสองกระบวนการ):

top - 17:14:41 up 3 days, 49 min, 14 users,  load average: 0.48, 0.54, 0.55
Tasks: 228 total,   1 running, 226 sleeping,   0 stopped,   1 zombie
%Cpu(s):  7.1 us,  5.5 sy,  0.0 ni, 86.5 id,  0.0 wa,  0.0 hi,  0.9 si,  0.0 st
KiB Mem:   8187940 total,  8007220 used,   180720 free,   349264 buffers
KiB Swap:  8191996 total,     5556 used,  8186440 free,  4173004 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                       
31573 terdon    20   0 24900 5576 1684 S   0.0  0.1   0:00.20 bash                                                          
31763 terdon    20   0  666m  77m  28m S   0.0  1.0   0:02.39 firefox /usr/share/doc/nano/faq.html                          

สำหรับคำอธิบายของข้อมูลที่แสดงโดยtopดูคำตอบของคำถามที่เกี่ยวข้องกับ SU


0

อักขระบางตัวภายใต้เชลล์มีไว้เพื่อวัตถุประสงค์พิเศษเช่น <> "; ...

grep PID ไม่มีประโยชน์เนื่องจาก PID เป็นรหัสกระบวนการและ grep จะค้นหาตัวเลขที่คล้ายกัน ...

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