Come visualizzare un processo specifico in alto


48

Esistono opzioni relativamente semplici con top per tracciare un processo specifico?
Idealmente identificando il processo con un valore leggibile dall'uomo? es . chromeo java.

In altre parole, voglio visualizzare tutte le informazioni tipiche fornite in alto, ma per filtrare i risultati in base ai parametri forniti, ad es. "chrome" o "java"


1
hai provato top | grep chrome?
Pandya

1
puoi anche usare ps -x | chromeper ottenere pid (lascia che sia mostrato pid 2034) e poitop | grep 2034
Pandya,

top | grep chromeha funzionato perfettamente - grazie!
Michael Coleman,

@Pandya - inoltre, il processo che stavo cercando ha funzionato solo per pochi secondi (node.js durante un test di integrazione) - il che significava che quando ho usato ps -x | process_nameil PID, quando ho eseguito di nuovo il processo il PID era diverso e quindi il il PID originale non lo identificherebbe.
Michael Coleman,

Risposte:


25

Si può semplicemente utilizzare 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.

Eseguire il comando seguente per ottenere l'output desiderato (ex-Chrome):

top | grep chrome

Qui stiamo usando grepcon pipeline |così top& greprun parallel; topoutput dato a grep(come input) e grep chromefiltra le linee corrispondenti chromefino topall'arresto.


1
grazie, so che altre persone hanno le loro preferenze, ma mi piace questa risposta perché è facile da capire, e quindi è anche più facile da ricordare in futuro! - Avrei votato ma non ho abbastanza reputazione ...
Michael Coleman,

3
Funziona solo se il processo è nell'output visualizzato in alto. Penso che la risposta di @ Ramesh dovrebbe essere quella accettata
jb

@JamieBullock tratta topsolo la domanda e OP desidera filtrare il processo in base a top.
Pandya,

@Pandya in realtà, ritiro il mio commento precedente poiché era basato su un errore nel mio codice. Penso ancora che la risposta di @ Ramesh sia migliore (e filtra anche il processo in base alla parte superiore). Posso facilmente rompere il tuo ad es. Consleep 10 & top | grep sleep
jb

Mi piace unix.stackexchange.com/a/165343/48973 perché mostra le intestazioni.
Ryan,

39

Dall'altra mia risposta qui , potresti fare qualcosa del tipo,

top -p `pgrep "java"`

4
top -p `pgrep "java"`mi dà il seguente errore in una shell bash top: -p requires argument. top -ppgrep -d ',' "apache2" ha funzionato per me, ma non ho davvero capito cosa stesse facendo il comando - è il modo di inserire più argomenti in cima?
Michael Coleman,

@Ramesh devi dare la pidvirgola alla lista separata per funzionare.
Kannan Mohan,

3
Questa è la risposta esatta.
j03m,

1
+1 Questa è la risposta corretta. "top | grep Chrome" è piuttosto barbarico, perché allontana TUTTO L'USCITA dall'alto senza corrispondere a "Chrome", perdendo cose come le etichette di intestazione e colonna. L'uso di una subshell con l'output di pgrep è un'applicazione corretta della filosofia unix.
John M Naglick,

2
@loretoparisi che potrebbe essere dovuto al fatto che il selettore che stai utilizzando corrisponde a più processi. Vedi questa risposta per un comando che funziona con uno o più processi corrispondenti.
Michael Hays,

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

Spiegazione:

  1. top -p pid1,pid2: mostra più informazioni di processo, il pid deve essere separato da ,
  2. pgrep -d "," java: stampa i pid di tutto il programma java, i pid sono separati da una nuova riga per impostazione predefinita. utilizzare il -d ","per separarlo ,come richiesto dalla parte superiore.

Se vedi un errore simile top: -p argument missing, significa che nessun programma java è in esecuzione, cioè pgrep non ha output.


1
Questa soluzione funziona meglio dell'uso solo di top -p pgrep "java" ``. grazie.
Loretoparisi,

1
Prevenire l'errore controllando pgrepil codice di uscita:pids="$(pgrep -d, java)" && top -p "$pids"
syme

12

In OpenBSD top, premi ge inserisci il nome del comando su cui desideri filtrare.

In topad es. Ubuntu, premere oe inserire ad es. COMMAND=chromePer mostrare solo le voci della COMMANDcolonna uguali a chrome.

Su Linux che utilizza la stessa topimplementazione di Ubuntu, leggi la sezione FILTERING in una finestra del topmanuale.


7

Altre buone risposte sono state fornite, ma qualche tempo fa ho realizzato uno script, che ho chiamato ptop, che mi serve bene:

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

Questo supporta più nomi di processo da specificare (come ptop bash chrome) e fornisce un messaggio di errore migliore nel caso in cui non ci siano / non ci siano processi con nessuno dei nomi specificati in esecuzione.


3

Se vuoi rimanere tope mantenere tutti gli altri processi in vista del contesto, puoi premere Lper cercare il tuo processo:

Locate string chrome

Ciò evidenzierà qualsiasi processo con chromenel nome e lo metterà in evidenza . Usa &per andare alla prossima partita.

È possibile premere cper passare dalla visualizzazione del nome del processo al comando completo.


Questo ^ perché le persone RTFM! man top | less +/5d
cprn,

0

Puoi anche usare un filtro in alto per isolare processi specifici. Premi 'O' per visualizzare il prompt del filtro. Quindi digitare un filtro formattato come FIELD = valore. Ad esempio, per filtrare tutti i processi tmux, utilizzare:

COMMAND=tmux

Utilizzare '=' per ripristinare i filtri. Vedi la sezione intitolata "FILTRAZIONE" nella pagina man in alto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.