Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рост числа дескрипторов после TerminateProcess, Создание и завершение процесса в цикле 
:(
    Опции темы
eugenius
Дата 22.9.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



У меня возникла вот такая вот проблема:
Задача состоит в том, чтобы непрерывно в цикле создавать процесс, а потом валить его .
Как при этом избежать роста числа дескрипторов в системе?
Оставив свою прогу на ночь .утром я обнаружил совершенно немыслимое число дескрипторов в таск менеджере,и,
есссно, свободная виптуальная память системы закончилась.
Количество потоков и процессов осталось на прежнем уровне.

Посмотрите на мой код, написанный ниже.
Что я делаю не так????

Спасибо 




while  (true)
         {
         STARTUPINFO si = { sizeof(si) };
         PROCESS_INFORMATION pi;
                                                        
         if   (!CreateProcess("c:\\windows\\notepad.exe", "c:\\windows\\notepad.exe", NULL, NULL, FALSE,      CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, pi)) 
             {
              wprintf(L"Failed to create process\n"); 
              break;
              }
         else
             wprintf(L"Process created successfully\n"); 
             
             Sleep(100);
             UINT exitcode = 0;
    
             TerminateProcess(pi->hProcess, exitcode);
            
             WaitForSingleObject(pi->hProcess, INFINITE );
            
             CloseHandle(pi->hProcess);
             CloseHandle(pi->hThread); 
           }
PM MAIL   Вверх
0x07L
Дата 22.9.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: 4
Всего: 5



Почитай внимательно о CreateProcess в MSDN:

BOOL CreateProcess(
  . . .
  LPPROCESS_INFORMATION lpProcessInformation
);

Parameters
. . .
lpProcessInformation 
Pointer to a PROCESS_INFORMATION structure that receives identification information about the new process. 
Handles in PROCESS_INFORMATION must be closed with CloseHandle when they are no longer needed.


Это сообщение отредактировал(а) 0x07L - 22.9.2006, 19:52
PM MAIL   Вверх
dumb
Дата 23.9.2006, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



0x07L,
Цитата(eugenius @  22.9.2006,  19:25 Найти цитируемый пост)

Код

             CloseHandle(pi->hProcess);
             CloseHandle(pi->hThread);


тут дело в чем-то еще. в чем именно - непонятно, потому как приведен не тот код, который реально всю ночь создавал утечку хэндлов, а некий обрезок, который содержит ошибки синтаксиса, а при исправлении оных работает правильно и никаких утечек не производит...
PM MAIL   Вверх
0x07L
Дата 23.9.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: 4
Всего: 5



Да, я опять пытался ответить на вопрос, не прочитав его полностью... Просто вспомнился случай из ранней практики, когда я не закрывал handle и потом удивлялся, почему количество дескрипторов увеличивается. Думал, и тут то же самое. Просто не знаю другой причины, почему могут утекать дескрипторы.

Проверил работу программы у себя: вроде все ок.

Кстати, недавно наткнулся на утечку ресурсов из стандартного диалога открытия файлов. Оказалось, такая штука происходит только у меня, хотя исполняемый файл - один и тот же. Может, и здесь то же самое - локальный глюк системы?
PM MAIL   Вверх
lemax
Дата 3.8.2008, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 14.10.2007

Репутация: нет
Всего: 1



Тема стара, но добавлю

В книжке msdn сказано что TerminateProcess тупо выкидывает процес из памяти.  Поэтому [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме], оставленное неожиданно выкинутым процессом, подтирать некому.
Там так и напис(санно). Поэтому применять эту TerminateProcess рекомендуют только в крайних случаях.

И кстать, убиенному процессу об этом событии даже не сообщается.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.