пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Процесс. Определение, особенности. Завершение процесса. Пример. Другие полезные функции для работы с процессами

 

Процесс обычно определяют как экземпляр выполняемой программы, и он состоит из двух компонентов:

  • объекта ядра, через который операционная система управляет процессом Там же хранится статистическая информация о процессе,
  • адресного пространства, в котором содержится код и данные всех EXE- и DLL модулей Именно в нем находятся области памяти, динамически распределяемой для стеков потоков и других нужд.

Процессу в Win32 отводится 4 Гб адресного пространства.

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

Так как процессы инертны, чтобы выполнить код программы необходимо создать поток. У процесса потоков может быть несколько. Все они будут выполнять код программы "одновременно".

 

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

1. Возврат управления входной функцией первичного потока

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

любые С++-объекты, созданные данным потоком, уничтожаются соответствующими деструкторами;

система освобождает память, которую занимал стек потока,

система устанавливает код завершения процесса (поддерживаемый объектом ядра "процесс") — его и возвращает Ваша входная функция;

счетчик пользователей данного объекта ядра "процесс" уменьшается на 1.

2. Функция ExitProcess

Процесс завершается, когда один из его потоков вызывает ExitProcess:

  VOID ExitProcess(UINT fuExitCode);

функция завершает процесс и заносит в параметр fuExitCode код завершения процесса. Возвращаемого значения у ExitProcess нет, так как результат ее действия — завершение процесса. Если за вызовом этой функции в программе присутствует какой-нибудь код, он никогда не исполняется.

3. Функция TerminateProcess

Вызов функции TerminateProcess тоже завершает процесс:

BOOL TerminateProcess(HANDLE hProcoss, UINT fuExitCode);

Главное отличие этой функции от ExitProcess в том, что ее может вызвать любой поток и завершить любой процесс. Параметр bProcess идентифицирует описатель завершаемого процесса, а в параметре fuExitCode возвращается код завершения процесса.

 

Несколько полезных функций:

PTSTR GetCommandLine(); - возвращает командную строку процесса.

DWORD GetEnvironmentVariable( PCTSTR pszName, PTSTR pszValue, DWORD cchValue); - выявляет присутствие переменной окружения pszName и записывает ее значение в pszValue. cchValue - размер буфера. Функция возвращает кол-во скопированных символов или 0.

DWORD SetEnvironmentVariable(PCTSTR pszName,
PCTSTR pszValue); - позволяет удалять, добавлять и модифицировать  значение переменной pszName.

DWORD GetCurrentDirectory(DWORD cchCurDir, PTSTR pszCurDir); 

BOOL SetCurrentDirectory(PCTSTR pszCurDir); - получает и устанавливает текущий каталог процесса.

THandle GetCurrentProcess(); - возвращает описатель текущего процесса

DWORD GetCurrentProcessId(); - возвращает идентификатор текущего процесса

 


27.12.2015; 15:08
хиты: 0
рейтинг:0
Точные науки
информатика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь