1

Я смотрю, запущен ли конкретный процесс как конкретный пользователь. Для чего я могу сделать это

ps --no-headers -C command -o user | grep user

Что довольно неплохо, однако, если я захочу напечатать аргументы (это может помешать grep для имени пользователя!), То будет немного уродливо.

ps --no-headers -C command -o user,pid,comm | egrep \^user

Это было бы еще хуже, если бы я не хотел, чтобы пользователь был первым или последним столбцом. Что было бы лучше, если бы я мог указать параметры -C и -U в PS, как это

ps --no-headers -C command -U user -o pid

Это, однако, не работает, так как два предложения действуют как OR, а не AND. Есть ли какая-то функция «ps», которую я пропускаю, или, может быть, другой аккуратный вкладыш, который я мог бы использовать? Ура!

1 ответ1

3

pgrep поддерживает различные условия:

pgrep -x -u "user" "command"

Замените -x на -f чтобы также соответствовать аргументам; добавить -l для отображения командной строки.

Вы также можете прочитать командную строку непосредственно из /proc/PID/cmdline (с нулевым разделением):

if pids=$(pgrep -x -u "user" "command"); then
    for pid in $pids; do
        tr "\0" " " < /proc/$pid/cmdline; echo
    done
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .