Шрифт:
Вы сможете увидеть создание процесса-зомби, если измените количество сообщений в программе из примера с вызовом
Программа fork2.c такая же, как программа fork1.с, за исключением того, что количества сообщений, выводимых родительским и дочерним процессами, поменяли местами. Далее приведены соответствующие строки кода:
Как это работает
Если вы выполните только что приведенную программу с помощью команды
Если родительский процесс завершится необычно, дочерний процесс автоматически получит в качестве родителя процесс с PID, равным 1 (init). Теперь дочерний процесс — зомби, который уже не выполняется, но унаследован процессом
Есть еще один системный вызов, который можно применять для ожидания дочернего процесса. Он называется
Аргумент
Итак, если вы хотите, чтобы родительский процесс периодически проверял, завершился ли конкретный дочерний процесс, можно использовать следующий вызов:
Он вернет ноль, если дочерний процесс не завершился и не остановлен, или
Перенаправление ввода и вывода
Вы можете применить ваши знания о процессах для изменения поведения программ, используя тот факт, что открытые файловые дескрипторы сохраняются вызовами
Далее приведена программа очень простой фильтрации upper.c, которая читает ввод и преобразует строчные буквы в прописные: