Я сделал следующий скрипт:
#!/bin/bash
pid=$$ # Current PID
ps -f $$ | head -n 1 # Show the header of ps
while [ $pid -gt 0 ]; do # No more parent when we reach 0 (the kernel)
ps -f $pid | tail -n +2 # ps current pid and remove header
pid=$(ps -o ppid $pid|tail -n 1) # Get parent pid
done
Он берет текущий PID ($$
в bash) и рекурсивно получает родительский PID, пока мы не достигнем 0 (который является ядром), печатая вывод ps -f
по пути (и заголовок для запуска, с ps -f | head -n 1
)
Я могу придумать два ограничения:
- Если запустить по SSH, родитель будет
sshd
а не приложение графического терминала.
- Если он выполняется в отдельном скрипте, он также напечатает этот скрипт.
Однако вы должны иметь возможность grep
его выходные данные и определять, является ли один из родительских процессов iTerm.app или Terminal.app при локальном запуске.