Надеюсь, что это достаточно переносимо, так как PPID является четвертым полем /proc/[pid]/stat
:
cut -d ' ' -f 4 /proc/self/stat
Предполагается, что Linux имеет правильную форму /proc
, что макет /proc/[pid]/stat
не будет несовместимо отличаться от того, что есть в Debian 6.0.1, что cut
- это отдельный исполняемый файл, а не встроенная оболочка, и это сокращение не порождает подпроцессы.
В качестве альтернативы выможно получить поле 6 вместо поля 4, чтобы получить PID «лидера сеанса» .Интерактивные оболочки, по-видимому, устанавливают себя лидерами сеансов, и этот идентификатор должен оставаться неизменным для всех каналов и вызовов подоболочек:
$ echo $(echo $( cut -f 6 -d ' ' /proc/self/stat ) )
23755
$ echo $(echo $( cut -f 4 -d ' ' /proc/self/stat ) )
24027
$ echo $$
23755
Тем не менее, это вводит зависимость от поведения работающей оболочки - он долженустанавливайте идентификатор сессии только тогда, когда это тот, чей PID вы на самом деле хотите.Очевидно, что это также не будет работать в сценариях, если вы хотите PID оболочки, выполняющей сценарий, а не интерактивный.