วิธีการดูกระบวนการเฉพาะด้านบน


47

มีตัวเลือกที่ค่อนข้างก้าวไปข้างหน้าพร้อมกับด้านบนเพื่อติดตามกระบวนการเฉพาะหรือไม่
เป็นการดีที่จะระบุกระบวนการด้วยคุณค่าที่มนุษย์อ่านหรือไม่ เช่นหรือchromejava

กล่าวอีกนัยหนึ่งฉันต้องการดูข้อมูลทั่วไปทั้งหมดที่มีให้ แต่สำหรับผลลัพธ์ที่จะถูกกรองไปยังพารามิเตอร์ที่ให้ไว้เช่น 'chrome' หรือ 'java'


1
คุณเคยลองtop | grep chromeไหม
Pandya

1
คุณสามารถใช้ps -x | chromeเพื่อรับ pid (ให้ pid แสดง2034) และจากนั้นtop | grep 2034
Pandya

top | grep chromeทำงานได้อย่างสมบูรณ์แบบ - ขอบคุณ!
Michael Coleman

@Pandya - เช่นกันขั้นตอนที่ฉันกำลังมองหาวิ่งเพียงไม่กี่วินาที (node.js ในระหว่างการทดสอบการรวม) - ซึ่งหมายความว่าเมื่อฉันใช้ps -x | process_nameเพื่อรับ PID เมื่อฉันวิ่งกระบวนการอีกครั้ง PID แตกต่างกันดังนั้น PID ดั้งเดิมจะไม่ระบุตัวตน
Michael Coleman

คำตอบ:


24

คุณสามารถใช้grep:

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       grep  searches  the  named  input  FILEs (or standard input if no files are named, or if a single
       hyphen-minus (-) is given as file name) for lines containing a match to the  given  PATTERN.   By
       default, grep prints the matching lines.

เรียกใช้คำสั่งต่อไปนี้เพื่อรับเอาต์พุตที่คุณต้องการ (ex-chrome):

top | grep chrome

ที่นี่เราใช้grepกับท่อ|เพื่อtop& grepรันขนาน; topเอาต์พุตที่กำหนดให้grep(เป็นอินพุต) และgrep chromeกรองบรรทัดที่ตรงกันchromeจนกว่าจะtopหยุด


1
ขอบคุณฉันรู้ว่าคนอื่นมีความชอบ แต่ฉันชอบคำตอบนี้เพราะเข้าใจง่ายและง่ายต่อการจดจำในอนาคตเช่นกัน! - ฉันจะอัปโหลด แต่ฉันไม่มีชื่อเสียงเพียงพอ ...
Michael Coleman

3
ใช้งานได้เฉพาะเมื่อกระบวนการอยู่ในเอาต์พุตที่แสดงด้านบน ฉันคิดว่าคำตอบของ @ Ramesh ควรเป็นคำตอบที่ได้รับ
jb

@JamieBullock ข้อเสนอคำถามที่มีtopเท่านั้นและ OP topต้องการที่จะดำเนินการบนพื้นฐานของตัวกรอง
Pandya

@Pandya จริง ๆ แล้วฉันถอนความคิดเห็นก่อนหน้าของฉันเนื่องจากมีข้อผิดพลาดในรหัสของฉัน ถึงกระนั้นฉันคิดว่าคำตอบของ @Ramesh นั้นดีกว่า (และยังกรองขั้นตอนตามด้านบน) ฉันสามารถทำลายคุณอย่างง่ายดายเช่นกับsleep 10 & top | grep sleep
jb

ฉันชอบunix.stackexchange.com/a/165343/48973ดีกว่าเพราะมันแสดงส่วนหัว
Ryan

39

จากคำตอบอื่นของฉันที่นี่คุณสามารถทำสิ่งที่ชอบ

top -p `pgrep "java"`

4
top -p `pgrep "java"`top: -p requires argumentทำให้ผมผิดพลาดต่อไปในเปลือกทุบตี top-p ใช้pgrep -d ',' "apache2"งานได้สำหรับฉัน แต่ฉันไม่เข้าใจจริง ๆ ว่าคำสั่งทำอะไร - เป็นวิธีการป้อนหลายอาร์กิวเมนต์ไปด้านบนหรือไม่
Michael Coleman

@Ramesh คุณต้องpidแยกรายการคอมมาให้ใช้งาน
Kannan Mohan

3
นี่คือคำตอบที่ถูกต้อง
j03m

1
+1 นี่คือคำตอบที่ถูกต้อง "top | grep Chrome" นั้นค่อนข้างป่าเถื่อนเพราะ greps-out ทั้งหมดของ OUTPUT จากด้านบนไม่ตรงกับ "Chrome" การสูญเสียสิ่งต่าง ๆ เช่นป้ายส่วนหัวและคอลัมน์ การใช้ subshell กับเอาต์พุตจาก pgrep เป็นแอปพลิเคชั่นที่ถูกต้องของปรัชญา unix
John M Naglick

2
@loretoparisi ที่อาจเป็นเพราะตัวเลือกที่คุณใช้ตรงกับหลายกระบวนการ ดูคำตอบนี้สำหรับคำสั่งที่ทำงานกับกระบวนการจับคู่หนึ่งกระบวนการขึ้นไป
Michael Hays

21
top -p `pgrep -d "," java`

คำอธิบาย:

  1. top -p pid1,pid2: แสดงข้อมูลกระบวนการหลายอย่าง pid ควรคั่นด้วย ,
  2. pgrep -d "," java: พิมพ์ pids ของโปรแกรมจาวาทั้งหมด, pids จะถูกคั่นด้วยบรรทัดใหม่ตามค่าเริ่มต้น ใช้-d ","เพื่อแยกโดย,ตามที่ต้องการโดยด้านบน

หากคุณเห็นข้อผิดพลาดเช่นtop: -p argument missingนั้นแสดงว่าไม่มีโปรแกรม Java กำลังทำงานอยู่นั่นคือ pgrep ไม่มีเอาต์พุต


1
วิธีนี้ใช้ได้ผลดีกว่าการใช้top -p pgrep "java" `` เท่านั้น ขอขอบคุณ.
loretoparisi

1
ป้องกันข้อผิดพลาดโดยตรวจสอบpgrepรหัสออกของ:pids="$(pgrep -d, java)" && top -p "$pids"
1818

12

ใน OpenBSD topเพียงกดgและป้อนชื่อคำสั่งที่คุณต้องการกรอง

ในtopบนเช่น Ubuntu กดoและป้อนเช่นCOMMAND=chromeเพื่อแสดงเฉพาะรายการจากคอลัมน์ที่มีค่าเท่ากับCOMMANDchrome

บน Linux ที่ใช้topการนำไปใช้เช่นเดียวกับ Ubuntu ให้อ่านส่วนการกรองในหน้าต่างในtopคู่มือ


7

มีการให้คำตอบที่ดีอื่น ๆ แต่ฉันทำสคริปต์เมื่อไม่นานมานี้ซึ่งฉันชื่อ ptop ซึ่งให้บริการฉันดี:

#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
  echo No processes with the specified name\(s\) were found
fi

สิ่งนี้สนับสนุนชื่อกระบวนการจำนวนมากที่ต้องระบุ (เช่นptop bash chrome) และจัดเตรียมข้อความแสดงข้อผิดพลาด nicer ในกรณีที่มี / ไม่มีกระบวนการที่มีชื่อใด ๆ ที่ระบุทำงานอยู่


3

หากคุณต้องการที่จะอยู่ในtopและให้กระบวนการอื่น ๆ ทั้งหมดในมุมมองของบริบทคุณสามารถกดLเพื่อค้นหากระบวนการของคุณ:

Locate string chrome

สิ่งนี้จะเน้นกระบวนการใด ๆ ที่มีchromeในชื่อและนำไปสู่ ใช้&เพื่อไปที่นัดต่อไป

คุณสามารถกดcเพื่อสลับระหว่างการแสดงชื่อกระบวนการและคำสั่งแบบเต็ม


นี่ ^ เพราะคน RTFM! man top | less +/5d
cprn

0

นอกจากนี้คุณยังสามารถใช้ตัวกรองด้านบนเพื่อแยกกระบวนการเฉพาะ กด 'O' เพื่อแสดงพร้อมท์ตัวกรอง จากนั้นพิมพ์ตัวกรองที่จัดรูปแบบเป็นค่า FIELD = ตัวอย่างเช่นหากต้องการกรองกระบวนการ tmux ทั้งหมดให้ใช้:

COMMAND=tmux

ใช้ '=' เพื่อรีเซ็ตตัวกรอง ดูหัวข้อ 'การกรอง' ในหน้าเว็บหลัก

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