Как я могу проверить, запущен ли процесс сценарием оболочки?

Учитывая процесс PID, как я могу

  • проверить, запущен ли в процессе сценарий оболочки?

  • если да, как я могу получить дочерний процесс (ы), который выполняется сценарий? по pgrep -P ?

Благодарю.

Когда вы выполняете сценарий оболочки, он запускает процесс, известный как подshell. Будучи дочерним процессом основной оболочки, подshell выполняет список команд в сценарии оболочки как batch (так называемая «пакетная обработка»).

В некоторых случаях вам может понадобиться узнать идентификатор процесса (PID) подоболочки, в которой выполняется ваш сценарий оболочки.

В bash PID процесса подоболочки сценария оболочки хранится в специальной переменной, называемой $$. Эта переменная доступна только для чтения, и вы не можете изменить ее в сценарии оболочки. Например:

 $ cat xyz.sh #!/bin/bash echo "PID of this script: $$" 

Что дает следующий вывод

 PID of this script: XXXX 

bash shell экспортирует несколько других переменных только для чтения. Например, PPID хранит идентификатор процесса родительского процесса подоболочки (то есть основной оболочки). UID хранит идентификатор текущего пользователя, который выполняет сценарий. Вот так (только пример)

 #!/bin/bash echo "PID of this script: $$" echo "PPID of this script: $PPID" echo "UID of this script: $ 

Который дает выход

 PID of this script: XXXX PPID of this script: XXXX UID of this script: XXXX