Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

3.1.3. Завершение процесса

Вновь созданный процесс начинает выполнять свою задачу. Но со временем новые процессы должны быть завершены, обычно после:

• выполнения работы и последующего выхода (добровольно);

• выхода при возникновении ошибки (добровольно);

• возникновения критической ошибки (принудительно);

• завершения из другого процесса (принудительно).

Обычно большинство процессов завершаются после выполнения своей работы. После компиляции заданной ему программы компилятор выполняет системный вызов, который сообщает операционной системе о завершении своей работы. Таким вызовом в UNIX-подобных системах является exit, а в Windows — ExitProcess. Программы, которые работают с выводом на экран, также поддерживают добровольное завершение. У интернет-браузеров, текстовых редакторов и подобных им программ всегда есть элемент окна или пункт меню для того, чтобы пользователь мог приказать процессу удалить или закрыть все свои временные файлы и завершить свою работу.

Второй причиной завершения является обнаружение процессом ошибки. Например, отсутствие файла с заданным именем при запуске компилятора приведет к объявлению для пользователя о факте отсутствия файла и выход из компилятора. Выхода из процессов, использующих экранный ввод, при задании им некорректных параметров обычно не происходит. Вместо этого будет вывод диалогового окна с информацией об ошибке и просьбой о повторном вводе параметров.

Третьей причиной завершения процесса является критическая ошибка, вызванная самим процессом и чаще всего связанная с необнаруженными на этапе тестирования ошибками в программе. Например, к завершению может привести неверная инструкция, ссылка на несуществующий адрес памяти или недопустимая математическая операция. В некоторых системах процесс может перехватить у операционной системы некоторые конкретные ошибки для самостоятельной обработки. В случае возникновения одной из таких ошибок процесс прерывается, но не завершается.

Четвертая причина завершения процесса — это выполнение процессом системного вызова, предписывающего операционной системе завершить некоторые другие процессы. В UNIX-подобных системах для этих целей используется системный вызов kill. В Windows такой функцией является TerminateProcess. У процесса, который выполняет подобный системный вызов, должны быть соответствующие полномочия. В некоторых системах при любом (принудительном или добровольном) завершении процесса завершаются и все созданные им процессы. Но ни UNIX-подобные системы, ни операционная система Windows так не делают.

Предыдущий раздел Оглавление Следующий раздел