Попробуйте это:
ps -o stat= -p $PPID
Если результат содержит «s» (нижний регистр), он был запущен из командной строки или задан внутри скрипта.Чтобы разделить эти две части:
ps -o stat= -p $$
будет содержать "+", если он не был задним фоном.
Вот таблица:
Run $$ $PPID
CL S+ Ss
CL& S Ss+
Script S+ S+
Script& S S
Script(&) S Ss
Script&(&) S NULL
Где (&)означает, что дочерний сценарий был фоновым, и & означает, что родительский сценарий (на который ссылается «Скрипт»), который выполнял его, был фоновым.CL означает командную строку.NULL означает, что ps выводит ноль, а $PPID
равно "1".
From man ps
:
s is a session leader
+ is in the foreground process group
Следует отметить, что этот ответ основан на GNU ps
, но справочные страницы для BSD (включая OS X) указывают на схожую функциональность.А GNU ps
- это гибрид, который включает в себя, помимо прочего, функциональность BSD.