Làm thế nào để xem một quá trình cụ thể trong đầu


47

Có bất kỳ tùy chọn tương đối rõ ràng với đầu để theo dõi một quá trình cụ thể?
Lý tưởng nhất bằng cách xác định quá trình bằng một giá trị có thể đọc được của con người? ví dụ chromehay java.

Nói cách khác, tôi muốn xem tất cả các thông tin hàng đầu cung cấp, nhưng để các kết quả được lọc theo các tham số được cung cấp tức là. 'chrome' hoặc 'java'


1
bạn đã thử top | grep chromechưa
Pandya

1
bạn cũng có thể sử dụng ps -x | chromeđể lấy pid (hiển thị pid 2034) và sau đótop | grep 2034
Pandya

top | grep chromelàm việc hoàn hảo - cảm ơn!
Michael Coleman

@Pandya - cũng vậy, quá trình tôi đang tìm kiếm chỉ chạy trong vài giây (node.js trong quá trình kiểm tra tích hợp) - có nghĩa là khi tôi sử dụng ps -x | process_nameđể có được PID, khi tôi chạy lại quy trình thì PID lại khác và do đó PID gốc sẽ không xác định nó.
Michael Coleman

Câu trả lời:


24

Bạn chỉ có thể sử dụng 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.

Chạy lệnh sau để nhận đầu ra mà bạn muốn (ex-chrome):

top | grep chrome

Ở đây chúng tôi đang sử dụng grepvới các đường ống |vì vậy top& grepchạy song song; topđầu ra được cung cấp cho grep(dưới dạng đầu vào) và grep chromelọc các dòng khớp chromecho đến khi topdừng lại.


1
cảm ơn, tôi biết những người khác có sở thích của họ, nhưng tôi thích câu trả lời này vì nó dễ hiểu, và do đó nó cũng dễ nhớ hơn trong tương lai! - Tôi sẽ được nâng cấp nhưng tôi không có đủ danh tiếng ...
Michael Coleman

3
Điều này chỉ hoạt động nếu quá trình ở đầu ra được hiển thị hàng đầu. Tôi nghĩ câu trả lời của @ Ramesh nên là câu trả lời được chấp nhận
jb

@JamieBullock chỉ giải quyết các câu hỏi topvà OP muốn lọc quy trình dựa trên top.
Pandya

@Pandya thực sự, tôi rút lại nhận xét trước đây của mình vì nó dựa trên một lỗi trong mã của tôi. Tuy nhiên, tôi nghĩ rằng câu trả lời của @ Ramesh là tốt hơn (và cả quá trình lọc dựa trên đầu trang). Tôi có thể dễ dàng phá vỡ ví dụ của bạn vớisleep 10 & top | grep sleep
jb

Tôi như unix.stackexchange.com/a/165343/48973 tốt hơn bởi vì nó cho thấy các tiêu đề.
Ryan

39

Từ câu trả lời khác của tôi ở đây , bạn có thể làm một cái gì đó như,

top -p `pgrep "java"`

4
top -p `pgrep "java"`cho tôi lỗi sau trong shell bash top: -p requires argument. top -ppgrep -d ',' "apache2" đã làm việc cho tôi, nhưng tôi không thực sự hiểu lệnh đang làm gì - đó có phải là cách cho ăn trong nhiều đối số lên đầu không?
Michael Coleman

@Ramesh bạn cần đưa ra piddanh sách dấu phẩy được phân tách để làm việc.
Kannan Mohan

3
Đây là câu trả lời đúng.
j03m

1
+1 Đây là câu trả lời đúng. "trên cùng Sử dụng một subshell với đầu ra từ pgrep là một ứng dụng chính xác của triết lý unix.
John M Naglick

2
@loretoparisi có thể là do bộ chọn bạn đang sử dụng khớp với nhiều quy trình. Xem câu trả lời này cho một lệnh hoạt động với một hoặc nhiều quy trình khớp.
Michael Hays

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

Giải trình:

  1. top -p pid1,pid2: hiển thị nhiều thông tin quá trình, pid nên được phân tách bằng ,
  2. pgrep -d "," java: in các pids của tất cả các chương trình java, các pids được phân tách bằng một dòng mới theo mặc định. sử dụng -d ","để tách nó theo ,yêu cầu của đầu trang.

Nếu bạn thấy lỗi như thế top: -p argument missing, điều đó có nghĩa là không có chương trình java nào đang chạy, tức là pgrep không có đầu ra.


1
Giải pháp này hoạt động tốt hơn so với chỉ sử dụng top -p pgrep "java" ``. cảm ơn bạn.
loretoparisi

1
Ngăn chặn lỗi bằng cách kiểm tra pgrepmã thoát:pids="$(pgrep -d, java)" && top -p "$pids"
syme 30/11/18

12

Trong OpenBSD top, chỉ cần nhấn gvà nhập tên lệnh bạn muốn lọc.

Trong topví dụ trên Ubuntu, nhấn ovà nhập ví dụ COMMAND=chromeđể chỉ hiển thị các mục từ COMMANDcột bằng chrome.

Trên các Linux sử dụng cùng cách toptriển khai với Ubuntu, hãy đọc phần LỌC trong phần Cửa sổ trong tophướng dẫn.


7

Những câu trả lời hay khác đã được cung cấp, nhưng tôi đã tạo ra một kịch bản cách đây một thời gian, mà tôi đặt tên là ptop, phục vụ tốt cho tôi:

#!/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

Điều này hỗ trợ nhiều tên quy trình được chỉ định (như ptop bash chrome) và cung cấp thông báo lỗi đẹp hơn trong trường hợp có / không có quy trình với bất kỳ tên được chỉ định nào đang chạy.


3

Nếu bạn muốn ở lại topvà giữ tất cả các quy trình khác trong bối cảnh, bạn có thể nhấn Lđể tìm kiếm quy trình của mình:

Locate string chrome

Điều này sẽ làm nổi bật bất kỳ quá trình với chrometrong tên, và đưa nó vào xem. Sử dụng &để đi đến trận đấu tiếp theo.

Bạn có thể nhấn cđể chuyển giữa hiển thị tên tiến trình và lệnh đầy đủ.


Điều này ^ vì người RTFM! man top | less +/5d
cprn

0

Bạn cũng có thể sử dụng bộ lọc ở trên để cô lập các quy trình cụ thể. Nhấn 'O' để hiển thị dấu nhắc bộ lọc. Sau đó nhập bộ lọc được định dạng là FIELD = value. Ví dụ: để lọc tất cả các quy trình tmux, hãy sử dụng:

COMMAND=tmux

Sử dụng '=' để đặt lại bộ lọc. Xem phần có tiêu đề 'LỌC' trong trang người đàn ông hàng đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.