Да, программа может знать, кто ее родитель.
Для примера создадим два сценария bash. Первый сообщает свой PID и запускает второй скрипт:
$ cat s1.sh
#!/bin/bash
echo s1=$$
bash s2.sh
Второй скрипт сообщает свой идентификатор процесса, PID своего родителя и командную строку, используемую для запуска родителя:
$ cat s2.sh
#!/bin/bash
echo s2=$$ PPID=$PPID
echo "Parent command: $(ps -o cmd= -q $PPID)"
Теперь давайте запустим их:
$ bash s1.sh
s1=17955
s2=17956 PPID=17955
Parent command: bash s1.sh
Как видите, второй скрипт действительно знает PID своего родителя. Используя ps
, этот PID показывает командную строку, использованную для вызова родительского скрипта.
Более подробное обсуждение PPID см. в answer Стефана Шазеласа.