Wie wähle ich bestimmte Prozesse mit 'top' aus?

18

Wenn ein Programm mehrere Instanzen hat, führt pidof programdas Ausführen zu folgenden Ergebnissen:

`1 2 3`

top -p akzeptiert kommagetrennte Argumente: 1, 2, 3 .

Dies bedeutet, dass top -p `pidof program`das nicht funktioniert:

    top: unknown argument '1'
usage:  top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

Können Sie mir zeigen, wie das geht? Ich bin nicht vertraut mit awk, sed, etc ...

Tshepang
quelle

Antworten:

25

Eine Alternative zu sedeinfachen Dingen wie diesem ist tr:

top -p $(pidof program | tr ' ' ',')

tr kann auch leicht mit einer variablen Anzahl von Leerzeichen umgehen:

tr -s ' ' ','

Wenn Sie es zur Verfügung haben, pgrepkönnen Sie auch hier gut arbeiten:

top -p $(pgrep -d , program)

Stellen Sie sicher, dass Sie ein Leerzeichen zwischen -dund lassen, ,da das Komma das Argument (das Trennzeichen) ist.

Beachten Sie auch, dass pgrep jedes Ergebnis von "program" zurückgibt. Wenn Sie also einen Prozess namens "program-foo" haben, wird auch dieser zurückgegeben (daher der Name pgrep).

Steven D
quelle
Für mehr als ein Programmtop -p $(pgrep -d, "(nginx|mysql)" )
user2037659
6

sedersetzt Ihr durch ,:

top -p $(pidof program | sed 's/ /, /g')
wedeln
quelle
3

Dies funktioniert gut, um mehr als ein Programm im Auge zu behalten:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
Ries
quelle
Besser verwenden:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659