- PVSM.RU - https://www.pvsm.ru -
Мы разрабатываем проект CRIU (Checkpoint/Restore in Userspace) и у нас возникла достаточно интересная задача о том, как восстановить оригинальное дерево процессов. Я предлагаю вам попытаться решить ее.
CRIU — это утилита, которая позволяет сохранить состояние процессов на диск и постановить их позднее на этой или на любой другой машине. Одной из подзадач восстановления является нахождение последовательности действий для того, чтобы восстановить дерево процессов. Входные данные содержат набор параметров для каждого процесса: уникальный идентификатор (PID), ссылку на родителя (PPID), идентификатор сессии (SID).
Входные данные содержат по строчке на каждый процесс. Каждая строка содержит 3 числа pid, ppid (pid родителя), sid и флаг zombie, который имеет значение 0 — если процесс мертвый (“зомби”), и 1 — если процесс живой.
1 0 1 1
6 1 6 1
8 6 7 1
15 6 12 1
10 1 10 1
11 10 7 1
13 10 12 1
1: fork(6)
6: fork(7)
7: setsid()
7: clone(8, CLONE_PARENT)
7: exit()
6: wait()
8: fork(9)
9: fork(10)
10: fork(11)
10: fork(12)
12: setsid()
12: clone(13, CLONE_PARENT)
12: clone(14, CLONE_PARENT)
12: exit()
10: wait(12)
14: fork(15)
6: prctl(PR_SET_CHILD_SUBREAPER, 1)
14: exit()
10: wait(14)
6: prctl(PR_SET_CHILD_SUBREAPER, 0)
9: exit()
8: wait(9)
6: setsid()
10: setsid()
Автор: avagin
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/44363
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/195330/
Нажмите здесь для печати.