Jak wybrać określone procesy za pomocą „góry”?

18

W przypadku jednego programu z wieloma instancjami uruchomienie pidof programdaje:

`1 2 3`

top -pprzyjmuje argumentów rozdzielonym przecinkami: 1, 2, 3.

Oznacza to, że top -p `pidof program`nie będzie działać:

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

Czy możesz mi pokazać, jak to zrobić. Nie znam awk, sed itp.

tshepang
źródło

Odpowiedzi:

25

Alternatywą seddla takich prostych rzeczy jest tr:

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

tr może również łatwo obsługiwać zmienną liczbę spacji:

tr -s ' ' ','

Dodatkowo, jeśli masz go dostępnego, pgrepmożesz dobrze pracować tutaj:

top -p $(pgrep -d , program)

Upewnij się, że pozostawiasz spację między -di ,jako przecinek jest argumentem (separatorem).

Zauważ też, że pgrep zwróci każdy wynik „programu”, więc jeśli masz proces o nazwie „program-foo”, to również zostanie zwrócony (stąd nazwa pgrep).

Steven D.
źródło
W przypadku więcej niż jednego programutop -p $(pgrep -d, "(nginx|mysql)" )
2037659,
6

sedzastępuje swoimi z ,:

top -p $(pidof program | sed 's/ /, /g')
machać
źródło
3

Działa to dobrze, aby mieć oko na więcej niż jeden program:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
Ries
źródło
Lepsze wykorzystanie:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659,