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: