Я зробив наступний сценарій:
#!/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 виконується локально.