Роббинс Арнольд
Шрифт:
Строки 1906–1912 порождают процесс, на этот раз закрывая оба канала, если
Строки 1914–1931 обрабатывают код потомка, с соответствующей проверкой ошибок и сообщениями на каждом шагу. Строка 1915 закрывает стандартный вывод. Строка 1918 копирует записываемый конец канала от потомка к родителю на 1. Строка 1920 закрывает стандартный ввод, а строка 1923 копирует читаемый конец канала от родителя к потомку на 0. Если это все работает, стандартные ввод и вывод теперь на месте и подключены к родителю.
Строки 1925–1926 закрывают все четыре первоначальные дескрипторы файлов каналов, поскольку они больше не нужны. Строка 1928 напоминает нам, что стандартная ошибка остается на месте. Это лучшее решение, поскольку пользователь увидит ошибки от сопроцесса. Программа
Наконец, строки 1929–1930 пытаются запустить для оболочки
Первым шагом родителя является настройка входного конца от сопроцесса. Указатель
Строка 1935 сохраняет значение ID процесса. Строка 1936 выделяет память для новой
Если выделение памяти потерпело неудачу, строки 1937–1942 производят очистку, закрывая каналы и посылая сигнал «kill» порожденным процессам, чтобы заставить их завершить работу. (Функция
104
Игра слов kill-overkill (избыточно — overkill) — Примеч. перев.