Создание процесса. Завершение процесса

Создание процесса.

Основные события, приводящие к созданию процесса:

  • ? Инициализация системы
  • ? Выполнение изданного работающим процессом системного запроса на создание процесса
  • ? Запрос пользователя на создание нового процесса
  • ? Инициирование пакетного задания

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

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

В UNIX существует только один системный запрос, направленный на создание процесса: fork.
Этот запрос создает дубликат вызываемого процесса. После выполнения запроса fork двум процессам - родительскому и дочернему - соответствуют одинаковые образы памяти, строки окружения и открытые файлы. Обычно, дочерний процесс выполняет системный вызов execve для изменения образа памяти и запуска новой программы.

В Windows вызов всего одной функции CreateProcess управляет и созданием процесса и запуском нужной в ней программы.
После создания нового процесса, родительский и дочерний процессы имеют собственные различные адресные пространства. В тоже время, созданный процесс может использовать одинаковые ресурсы с родительским процессом, например открытые файлы.

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

Основные события, приводящие к завершению процесса:

  • ? Обычный выход (преднамеренно)
  • ? Выход по ошибке (преднамеренно)
  • ? Выход по неисправимой ошибке (непреднамеренно)
  • ? Уничтожение другим процессом (непреднамеренно)


В основном, процессы завершаются по мере выполнения своей работы
. После окончания компиляции программы, компилятор выполняет системный запрос, чтобы сообщить операционной системе о завершении работы.
В UNIX этот запрос - exit,
а в Windows - ExitProcess.

Так же, причиной завершения процесса может служить выполнение другим процессом системного запроса на уничтожение процесса. В UNIX такой системный запрос - kill, а в Windows - TerminateProcess. В обоих случаях “киллер” должен обладать соответствующими правами к убиваемому процессу.