Операционные системы    
 Учебное пособие
 Долгов В.В.
 Главная|   Содержание|   Скачать архив (50 кб)

 

1. Создание и уничтожение процессов в ОС семейства Microsoft Windows

 

В операционных системах семейства Windows существует несколько системных вызовов, позволяющих запускать новые процессы: WinExec(…), ShellExecute(…) и CreateProcess(…). Самым базовым из них является системный вызов CreateProcess(…), допускающий использование множества дополнительных параметров. Вызов ShellExecute(…) представляет собой высокоуровневую обертку вокруг CreateProcess(…) и поддерживает обработку типов файлов, зарегистрированных графической оболочкой операционной системы. Входными параметрами вызова CreateProcess(…) являются:



Имя параметра

Краткое описание

1.

lpApplicationName

Имя программы (или NULL, если имя программы указанно в командной строке). Параметр должен содержать точное месторасположения файла с запускаемым процессом

2.

lpCommandLine

Командная строка. Если первый параметр пуст (NULL), то часть командной строки до первого пробела будет воспринято ОС как имя программы

3.

lpProcessAttributes

Атрибуты безопасности для создаваемого дескриптора процесса (может быть NULL).

4.

lpThreadAttributes

Атрибуты безопасности для создаваемого дескриптора главного потока (может быть NULL).

5.

bInheritHadlers

Указывает, наследует ли новый процесс дескрипторы, принадлежащие текущему процессу

6.

dwCreationFlags

Параметры создания процесса

7.

lpEnvironment

Значения переменных окружения (или NULL, если наследуется текущее окружение)

8.

lpCurrentDirectory

Текущий каталог по умолчанию (или NULL, если используется текущий каталог текущего процесса)

9.

lpStartupInfo

Указатель на структуру типа STARTUPINFO, содержащей информацию о запуске процесса

10.

lpProcessInformation

Возвращаемые функцией дескрипторы и идентификаторы ID процесса и его главного потока

Для завершения процессов можно использовать либо функцию ExitProcess(…), если речь идет о завершении процессом самого себя, либо системный вызов TerminateProcess(…), позволяющий «обрывать» работу любого процесса в случае наличия у пользователя соответствующих полномочий. Например, участок кода

STARTUPINFO si = {sizeof(si)};
PROCESS_INFORMATION pi;
if( CreateProcess(“C:\\Windows\\explorer.exe”, NULL, NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi) )
{
        CloseHandle(pi.hThread);
        if( WaitSingleObject(pi.hProcess, 5*1000 ) == WAIT_TIMEOUT )
                TerminateProcess(pi.hProcess, 0);
        CloseHandle(pi.hProcess);
}

запускает экземпляр графической оболочки системы и ожидает его закрытия в течение 5 секунд, после чего производит его принудительное завершение.




ЗАДАНИЕ 1.

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

ЗАДАНИЕ 2.

Реализовать программу, которая запускает исполняемые файлы (исполняемыми считаются файлы с расширениями .exe, .bat, .cmd) из указанного в качестве параметра каталога. После завершения каждого запущенного процесса соответствующий исполняемый файл должен удаляться. В случае если в указанном каталоге отсутствуют файлы, программа должна ожидать их появления. Учесть, что запуск файлов с расширениями .bat и .cmd может быть осуществлен только с помощью командного процессора cmd.exe.

ЗАДАНИЕ 3.

Создать программу, запускающую приложения с подмененными стандартными потоками ввода/вывода (для подмены использовать структуру STARTUPINFO). В качестве стандартного потока ввода должен выступать файл input.txt в качестве стандартного потока вывода – output.txt. Проверить работоспособность программы на специально подготовленном примере.





 Главная|   Содержание|   Скачать архив (50 кб)