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.

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).


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')

3

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

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`

Lepsze wykorzystanie:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.