Получение идентификатора процесса Linux с использованием pgrep - PullRequest
2 голосов
/ 27 апреля 2020

У меня есть bash скрипт с именем run.sh, который запускает два python скрипта meter_1.py и meter_2.py

#!/bin/sh

./meter_1.py &
./meter_2.py &

Когда скрипты работают, и я ищу PID сценарии, использующие команду

ps -aux | grep python

Выходные данные

openhab+  9328 84.0  1.6  25320 16580 pts/0    R    22:23   0:04 python ./meter_1.py
openhab+  9329 84.6  1.6  25320 16596 pts/0    R    22:23   0:04 python ./meter_2.py

Используя команду pgrep, я могу получить PID

>pgrep python 
9328 
9329 

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

Например:

>pgrep python" "./meter_1.py
9328 

Есть ли такая функция в pgrep? Кажется, что работает следующее, но было бы неплохо вернуть только идентификатор процесса.

>ps -aux | grep python" "./meter_1.py
openhab+  9328 84.0  1.6  25320 16580 pts/0    R    22:23   0:04 python ./meter_1.py

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Если у вас есть контроль над процессом, как будто вы тот, кто запускает процесс в скрипте, чтобы расширить то, что уже опубликовано.

#!/bin/sh
./meter_1.py & meter_1_py_pid=$!
./meter_2.py & meter_2_py_pid=$!

Пидс находятся в переменных $meter__1_py_pid и $meter__2_py_pid Вы можете делать с пидами все, что захотите, проверить, работает ли он, убить его и т. д.

1 голос
/ 27 апреля 2020

В ba (sh) вы можете получить PID последнего запущенного процесса с помощью $!

, поэтому в вашем скрипте run.sh вы можете просто использовать:

#!/bin/sh

./meter_1.py &
echo PID of process1: $!
./meter_2.py &
echo PID of process2: $!
...