Cara melihat proses tertentu di atas


48

Apakah ada opsi yang relatif lurus ke atas dengan top untuk melacak proses tertentu?
Idealnya dengan mengidentifikasi proses dengan nilai yang dapat dibaca manusia? misalnya chromeatau java.

Dengan kata lain, saya ingin melihat semua informasi yang diberikan oleh top, tetapi untuk hasil yang akan difilter ke parameter yang disediakan yaitu. 'chrome' atau 'java'


1
Anda mencoba top | grep chrome?
Pandya

1
Anda juga dapat menggunakan ps -x | chromeuntuk mendapatkan pid (biarkan pid ditampilkan 2034) dan kemudiantop | grep 2034
Pandya

top | grep chromebekerja dengan sempurna - terima kasih!
Michael Coleman

@ Pandya - juga, proses yang saya cari hanya berjalan selama beberapa detik (node.js selama tes integrasi) - yang berarti ketika saya digunakan ps -x | process_nameuntuk mendapatkan PID, ketika saya menjalankan proses lagi PID berbeda dan oleh karena itu PID asli tidak akan mengidentifikasinya.
Michael Coleman

Jawaban:


25

Anda cukup menggunakan 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.

Jalankan perintah berikut untuk mendapatkan output yang Anda inginkan (ex-chrome):

top | grep chrome

Di sini kita gunakan grepdengan pipa |jadi top& grepjalankan paralel; topoutput diberikan ke grep(sebagai input) dan grep chromemenyaring garis yang cocok chromesampai topberhenti.


1
terima kasih, saya tahu orang lain memiliki preferensi mereka, tetapi saya suka jawaban ini karena mudah dimengerti, dan karena itu lebih mudah diingat di masa depan juga! - Saya akan diputuskan tetapi saya tidak memiliki reputasi yang cukup ...
Michael Coleman

3
Ini hanya berfungsi jika prosesnya ditampilkan di atas. Saya pikir jawaban Ramesh adalah jawaban yang diterima
jb

@JamieBullock hanya menangani pertanyaan topdan OP ingin memfilter proses berdasarkan top.
Pandya

@ Pandya sebenarnya, saya menarik komentar saya sebelumnya karena didasarkan pada kesalahan dalam kode saya. Masih saya pikir jawaban @ Ramesh lebih baik (dan juga memfilter proses berdasarkan atas). Saya dapat dengan mudah menghancurkan milik Anda misalnya dengansleep 10 & top | grep sleep
jb

Saya suka unix.stackexchange.com/a/165343/48973 lebih baik karena menunjukkan header.
Ryan

39

Dari jawaban saya yang lain di sini , Anda dapat melakukan sesuatu seperti,

top -p `pgrep "java"`

4
top -p `pgrep "java"`memberi saya kesalahan berikut dalam bash shell top: -p requires argument. top-ppgrep -d ',' "apache2" berhasil untuk saya, tapi saya tidak benar-benar mengerti apa yang dilakukan perintah - apakah itu cara memberi makan dalam beberapa argumen ke atas?
Michael Coleman

@ Ramesh Anda harus memberikan pidkoma daftar yang dipisahkan agar berfungsi.
Kannan Mohan

3
Ini adalah jawaban yang benar.
j03m

1
+1 Ini adalah jawaban yang benar. "top | grep Chrome" agak barbar, karena ia merebut semua OUTPUT dari atas yang tidak cocok dengan "Chrome," kehilangan hal-hal seperti label header dan kolom. Menggunakan subkulit dengan output dari pgrep adalah aplikasi yang benar dari filosofi unix.
John M Naglick

2
@loretoparisi yang mungkin karena pemilih yang Anda gunakan cocok dengan beberapa proses. Lihat jawaban ini untuk perintah yang bekerja dengan satu atau lebih proses pencocokan.
Michael Hays

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

Penjelasan:

  1. top -p pid1,pid2: tampilkan beberapa informasi proses, pid harus dipisahkan oleh ,
  2. pgrep -d "," java: cetak id dari semua program java, id dipisahkan oleh baris baru secara default. gunakan -d ","untuk memisahkannya ,seperti yang diminta oleh bagian atas.

Jika Anda melihat kesalahan seperti top: -p argument missing, itu berarti tidak ada program java yang sedang berjalan, yaitu pgrep tidak memiliki output.


1
Solusi ini berfungsi lebih baik daripada menggunakan top -p pgrep "java" `` saja. Terima kasih.
loretoparisi

1
Cegah kesalahan dengan memeriksa pgrepkode keluar:pids="$(pgrep -d, java)" && top -p "$pids"
syme

12

Di OpenBSD top, cukup tekan gdan masukkan nama perintah yang ingin Anda filter.

Di topmisalnya pada Ubuntu, tekan odan masukkan misalnya COMMAND=chromeuntuk hanya menampilkan entri dari COMMANDkolom yang sama dengan chrome.

Di Linux yang menggunakan topimplementasi yang sama seperti Ubuntu, baca bagian FILTERING di Jendela di topmanual.


7

Jawaban bagus lainnya telah disediakan, tetapi saya membuat skrip beberapa waktu lalu, yang saya beri nama ptop, yang membantu saya dengan baik:

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

Ini mendukung beberapa nama proses untuk ditentukan (seperti ptop bash chrome) dan memberikan pesan kesalahan yang lebih bagus jika ada / tidak ada proses dengan salah satu nama yang ditentukan berjalan.


3

Jika Anda ingin tetap tinggal topdan menjaga semua proses lainnya agar sesuai konteks, Anda dapat menekan Luntuk mencari proses Anda:

Locate string chrome

Ini akan menyoroti proses apa pun dengan chromenamanya, dan membawanya ke tampilan. Gunakan &untuk pergi ke pertandingan berikutnya.

Anda dapat menekan cuntuk beralih antara menampilkan nama proses dan perintah lengkap.


Ini ^ karena orang-orang RTFM! man top | less +/5d
cprn

0

Anda juga dapat menggunakan filter di atas untuk mengisolasi proses tertentu. Tekan 'O' untuk membuka prompt filter. Kemudian ketikkan filter yang diformat sebagai FIELD = value. Misalnya, untuk memfilter semua proses tmux, gunakan:

COMMAND=tmux

Gunakan '=' untuk mengatur ulang filter. Lihat bagian berjudul 'FILTERING' di halaman manual teratas.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.