UNIX PID, PPID и nohup

Накратко, диаграмата на процеса вLinux (и всяка другаUNIX подобна система) изглежда като дърво. Първият процес винаги е init процес номер 1, който ражда всички останали процеси.

Процес, стартиран в нормален режим, получава свой собствен PID (Process ID), а като PPID (Parent Process ID - идентификатор на родителски процес) получава номера на процеса, „от който“ е стартиран. Когато родителският процес приключи, дъщерният процес също ще прекрати работата си, т.к неговият "родителски процес" ще изпрати команда за изключване на всички свои "деца".

Да разгледаме един пример:

Тук виждаме работещ процес на bash интерпретатор, изпълняващ горната програма. Процесът на bash има PID 1332. А горният процес има PID 1333 и PPID 1332, защото bash е негов "родител".

Сега нека приключим с bash:

Самият горен процес също беше убит.

За да избегнете това, просто стартирайте процеса с помощта на командата nohup, която вече беше спомената в статията за Linux & FreeBSD: команди kill, nohup - сигнали и контрол на процеса.

Нека да видим как работи.

Стартираме фоновата задача за ping с nohup.

Нека проверим неговия PID и PPID:

PPID за ping 1567, който е процесът:

Сега нека убием родителския процес:

И проверете какво се случи с нашия ping процес:

Той продължава да работи, но вместо да бъде убит от bash, неговият "родител" е init процесът, който винаги има PID 1: