Пара дополнительных команд для Sh

Иногда требуется вывести top процессов с определенным именем. Обычно делается это в два шага ps + top. Но это можно и нужно автоматизировать!

$ ps -C my_prog
  PID TTY          TIME CMD
 2388 pts/2    00:00:03 my_prog
$ top -p 2388

Это неудобно, если имеется много процессов. Ниже представлены три команды (по сути две), которые делают тоже самое за вас.

Три команды, которые сделают жизнь проще (top-utils.sh) download
topany() {
    COMM=$1
    PIDS=$(ps xa | grep ${COMM} | awk '{ a=$1; b = b "," a; } END { print b }' | sed 's/^,//')
    top -p $PIDS
}

topcmd() {
    COMM=$1
    PIDS=$(ps -C ${COMM} | tail -n1 | awk '{ a=$1; b = b "," a; } END { print b }' | sed 's/^,//')
    top -p $PIDS
}

pscmd() {
    COMM=$1
    ps -o pid,%cpu,%mem,vsz,rss,size,sz,nlwp,stat,start,time,comm -C $COMM
}

alias topany=topany
alias topcmd=topcmd
alias pscmd=pscmd

Достаточно добавить их в свой ~/.zshrc, ~/.bashrc и загрузить их, например, для bash:

$ . ~/.bashrc

У вас появится три новые команды: topany, topcmd и pscmd. Первые две выводят информацию по процессу в top. Последняя это расширенная версия ps (может кому пригодится). Пользоваться ими просто, как пример, вывод top для процессов с именем ssh:

$ topcmd ssh

Аналогично для вывода top, где содержится указанное слово используем topany:

$ topany mysql

Последнее выведет top для процессов mysqld, mysqld_safe, mysql и других, у которых в имени или параметров присутствует слово mysql.

С коммандой pscmd, надеюсь, догадаетесь как пользоваться.