Диспетчер процессов top имеет возможность выводить данные по конкретным процессам при указании их идентификаторов (PID), что не является удобным для работы рядового пользователя. Данный скрипт определяет PID процессов по заданному имени и вызывает top только для них.
#!/bin/bash
if [ -n "$1" ]
then
PIDs=$(pgrep -d ',' $1)
if [ -n "$PIDs" ]
then
top -p$PIDs
else
echo "Процесс $1 не найден"
fi
else
top
fi
В конструкции if [ -n «$1» ] флаг -n проверяет что строка имеет не нулевую длину и необходимо искать идентификаторы процесса, иначе будет запущен обычный top.
Команда pgrep $1 выводит номера процессов в столбик, а для top необходимо перечисление через запятую без пробелов, для этого применим флаг -d и зададим в качестве разделителя запятую.
Проведем проверку длинны строки для того что бы убедиться, что процесс с таким именем есть в системе.
В случае наличия такого процесса(-ов) вызовем команду top с флагом -p, который как было сказано ранее принимает идентификаторы в формате -p1,2,3