Как получить pid запущенного процесса с помощью одной команды, которая анализирует выходные данные ps?

Я ищу одну строку, которая возвращает pid запущенного процесса.

В настоящее время у меня:

ps -A -o pid,cmd|grep xxx|head -n 1

и это возвращает кулак pid, command. Мне нужно только первое число с выхода и игнорировать остальные. Я полагаю sed или awk помогло бы здесь, но мой опыт работы с ними ограничен.

кроме того, это имеет другую проблему, он вернет pid grep, если xxx не работает.

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

10
задан sorin
27.01.2023 10:21 Количество просмотров материала 2386
Распечатать страницу

6 ответов

Если вы просто хотите PID процесса, вы можете использовать pgrep если таковые имеются. pgrep <command> вернет pid команды (или список PID в случае, если запущено более одного экземпляра команды, в этом случае вы можете использовать head или другие соответствующие команды)

Надеюсь, это поможет!

26
отвечен another.anon.coward 2023-01-28 18:09

нужна еще одна команда; вам нужно только первое поле из строки значений, разделенных пробелами:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print }'

ну, два. Я добавил еще один grep, чтобы удалить grep из вывода.

7
отвечен chepner 2023-01-28 20:26

просто используйте pgrep, это гораздо более прямо вперед

pgrep -o -x xxxx

выше выбирается самый старый процесс с точным именем

5
отвечен 2023-01-28 22:43

pidof xxx хватит на linux

1
отвечен herve3527 2023-01-29 01:00

работает на Cygwin, поэтому я не могу использовать -A и-o, но что-то вроде этого:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print }'
4580
0
отвечен AlG 2023-01-29 03:17

вы можете сделать что-то вроде

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$//'

тогда xxx должно быть именем процесса и он не будет забирать grep из-за якоря ^

0
отвечен pizza 2023-01-29 05:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх