Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Создание процесса. Три основных события, приводящие к созданию процессов (вызов fork или CreateProcess):



Три основных события, приводящие к созданию процессов (вызов fork или CreateProcess):

· Загрузка системы

· Работающий процесс подает системный вызов на создание процесса

· Запрос пользователя на создание процесса

Во всех случаях, активный текущий процесс посылает системный вызов на создание нового процесса.

В UNIX каждому процессу присваивается идентификатор процесса (PID - Process IDentifier)

Функция CreateProcess создает новый процесс, который запускается независимо от процесса, который его создал. Однако для простоты, это взаимоотношение упоминается как родительское - дочернее отношение.

Нижеследующий фрагмент кода показывает, как создать процесс.

void main(VOID) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); // Запустим дочерний процесс. if(!CreateProcess(NULL, // Нет имени модуля (используется командная строка). "MyChildProcess", // Командная строка. NULL, // Дескриптор процесса не наследуемый. NULL, // Дескриптор потока не наследуемый. FALSE, // Установим наследование дескриптора в FALSE. 0, // Флажков создания нет. NULL, // Используйте блок конфигурации родителя. NULL, // Используйте стартовый каталог родителя. &si, // Указатель на структуру STARTUPINFO. &pi) // Указатель на структуру PROCESS_INFORMATION. ) ErrorExit("CreateProcess failed."); // Ждать до тех пор, пока дочерний процесс не выйдет из работы. WaitForSingleObject(pi.hProcess, INFINITE); // Закроем дескрипторы процесса и потока. CloseHandle(pi.hProcess); CloseHandle(pi.hThread); }

Если CreateProcess завершается успешно, она возвращает структуру PROCESS_INFORMATION, содержащую дескрипторы и идентификаторы для нового процесса и первичного потока. Дескрипторы потока и процесса создаются с полными правами доступа, хотя доступ может быть ограничен, если Вы устанавливаете описатели системы безопасности. Когда Вы больше не нуждаетесь в этих дескрипторах, то закрываете их при помощи использования функции CloseHandle.

Вы можете также создать и процесс, используя функцию CreateProcessAsUser или CreateProcessWithLogonW. Эти функции позволяют Вам определить контекст защиты учетной записи пользователя, в которой процесс выполняется.





Дата публикования: 2015-01-24; Прочитано: 1061 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...