1

Как я могу сделать pgrep -U someUserName используя только ps и grep? Т.е. не рассчитывать на установку pgrep в системе?

1 ответ1

1

В одну сторону:

ps -U someUserName -o pid,comm | awk '/someProcessName/{print $1}'

Обратите внимание, что вы можете получить несколько идентификаторов процессов в качестве выходных данных, если запущено несколько процессов, соответствующих имени пользователя и процесса.

Вывод ps действительно сделан для удобочитаемого представления, а не для такой обработки. Существуют и другие инструменты для предоставления более низкого уровня доступа к списку процессов в формате, лучше подходящем для написания сценариев, например, библиотеки pgrep , Perl/Python/... и так далее.


Чтобы сделать это, используя только ps и grep как вы просите, можно сделать

ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'

Это будет включать начальные пробелы, но это должно быть проблемой в приложении, например

for i in $(ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'); do
    kill $i
done

должно сработать.

Но, как я уже сказал, pkill - более правильный и надежный способ, и он должен быть широко доступен.

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