Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО_экзамен.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
500.22 Кб
Скачать

6. Класс процесса.

Соответственно все процессы разделены на классы, каждый из которых управляется в соответствии со своими правилами, например имеются классы процессов разделения времени и реального времени, а так же класс системных процессов.!

В современном UNIX используются три класса планируемых процессов:

• Процессы разделения времени;

• Системные процессы;

• Процессы реального времени (с фиксированным приоритетом).

7. Текущий директорий процесса.

Поток может получать и устанавливать текущие каталог и диск для процесса с помощью двух функций:

DWORD GetCurrentDirectory( DWORD cchCurDir, PTSTR pszCurDir);

BOOL SetCurrentDirectory(PCTSTR pszCurDir);

Текущие каталоги для процесса

Система отслеживает текущие диск и каталог для процесса, но не текущие каталоги на каждом диске. Однако в операционной системе предусмотрен кое-какой сервис для манипуляций с текущими каталогами на разных дисках. Он реализуется через переменные окружения конкретного процесса. Например:

=C:=C:\Utility\Bin

=D:=D:\Program Files

Эти переменные указывают, что текущим каталогом на диске С является \Utility\Bin, а на диске D — \Program Files.

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

Если родительский процесс создает блок переменных окружения и хочет передать его дочернему процессу, тот не наследует текущие каталоги родительского процесса автоматически. Вместо этого у дочернего процесса текущими на всех дисках становятся корневые каталоги. Чтобы дочерний процесс унаследовал текущие каталоги родительского, последний должен создать соответствующие переменные окружения (и сделать это до порождения другого процесса). Родительский процесс может узнать, какие каталоги являются текущими, вызвав GetFullPathName:

DWORD GetFullPathName( PCTSTR pszFile, DWORD cchPath,

PTSTR pszPath, PTSTR *ppszFilePart);

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

TCHAR szCurDir[MAX_PATH];

DWORD GetFullPathName(TEXT("C:"), MAX_PATH, szCurDir, NULL);

8. Получение инф-ции о процессе

Для снимка процесса используется функция

CreateToolhelp32SnapShot(

DWORD dwflags,

DWORD th32ProcessID

)

Для получения инфы о процессе используют Process32First, Process32Next

Указатель на

BOOL WINAPI Process32First(

HANDLE hSnapshot,

LPPROCESSENTRY32 lppe

);

Указатель на PROCESSENTRY32 структуру. Она содержит информацию о процессе, такую как имя исполняемого файла, идентификатор процесса, и идентификатор родителя данного процесса.

9. Окончание процесса

Независимо от того, как именно Вы создали объект ядра, по окончании работы с ним его нужно закрьть вызовом CloseHandle

BOOL CloseHandle(HANDLE hobj);[1]

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

41