fork
запускает процесс в фоновом режиме. Когда приоритетный процесс (тот, который звонит fork
) завершается, оболочка вызова уведомляется, и она показывает новую подсказку. Оболочка является родителем исходного, приоритетного процесса; это не родитель ни одного разветвленного процесса.
Порядок, в котором выполняются исходный процесс и разветвленный процесс, не фиксируется, но он вряд ли отклонится любым соответствующим способом из-за 2-секундной задержки. В Вашем тесте это так происходит, которым была временная шкала:
fork
первый ребенок от исходного процесса.fork
второй ребенок от первого ребенка.waitid
проследите и запускается waitpid
звоните для ожидания первого ребенка.exit
трассировка и выходы.waitpid
назовите возвраты.will exit
трассировка.sleep
вызов во втором ребенке завершается, и второй ребенок печатает has parent
трассировка.Оболочка не получает уведомления вообще о том последнем событии, потому что это не родитель процесса смерти. В любом случае это уже отобразило подсказку и ожидает Вас для ввода новой команды; это не имело бы никакой причины сделать что-либо (при вводе команды которая могла бы быть разрушительной).
Да, это возможно путем определения другого корневого местоположения,
- r, - корень Указывает альтернативный корень установки (значение по умолчанию/). Это не должно использоваться в качестве способа установить программное обеспечение в/usr/local вместо/usr. Эта опция используется, если Вы хотите установить пакет на временном смонтированном разделе, который "принадлежит" другой системе.Примечание: если путь к базе данных или файл журнала не будут указаны или на командной строке или в pacman.conf (5), то их местоположение по умолчанию будет в этом корневом пути.