Intereting Posts
Повторяющаяся ошибка компоновщика символов (справка на C ++) C / C ++ неиспользованная встроенная функция undefined reference Лучший способ использовать Идиомы с именованным параметром C ++? Целое продвижение – какие шаги Как добавить условие ‘или’ в #ifdef Ресурсы для шаблонов C ++ Неблокирующая связь в MPI и MPI Wait Issue. Не вся информация передается правильно GNU make – как запускать до и после рецептов для каждой цели Почему fopen получает отказ в собственном методе из-за проблемы с правами доступа из приложения Android-NDK? Как можно использовать семафоры в многоядерных системах? передача встроенной функции в качестве параметра шаблона C ++ Builder 2009 – Невозможно сфокусировать отключенное или невидимое окно Как визуализировать байты с C / C ++ Сохранение cos и sin в вектор и получение странных значений Вопрос о модели программирования сокета сервера

Как начать процесс и сделать его «независимым»,

Предполагая, что у меня есть эти два факта:

CreateProcess() запускает процесс и позволяет вашей программе продолжать работу во время ее запуска, но когда ваша программа заканчивается, дочерний процесс переходит к ней. Кроме того, ваша программа должна учитывать, когда дочерний процесс завершается, чтобы он мог правильно освободить дескриптор процесса.

system() запускает процесс, ждет его завершения и продолжает свою программу.

  • мне нужно знать, как начать процесс и позволить ему работать независимо от моей программы и сохраняться после выхода моей программы. Мне не нужно записывать его вывод или контролировать его, я просто хочу, чтобы пользователь взаимодействовал с ним, – например, я хотел написать альтернативу команде «Пуск».

Так, пожалуйста, на самом деле можно это сделать?

CreateProcess() не CreateProcess() завершения дочернего процесса по умолчанию, он немедленно возвращается. Используйте WaitForSingleObject если вы хотите подождать. Нет, дочерний процесс не будет автоматически отключен при выходе родителя, и дескриптор автоматически освобождается операционной системой, поэтому не нужно делать это самостоятельно (если вы используете современную версию Windows).

Как и любой ресурс ОС (объекты gdi, объекты пользователя, объекты ядра), если вы не уничтожаете / не выпускаете / не закрываете ресурс самостоятельно, тогда у вас будет утечка ресурсов во время запуска вашего приложения. Вы должны закрыть обе руки, возвращенные из CreateProcess вскоре после возврата CreateProcess .

Вы можете указать «DETACHED_PROCESS» в CreationFlags. Как следующий код snippent:

 if (CreateProcessW(NULL, (LPWSTR) L"File.exe ", 0, 0, false,CREATE_DEFAULT_ERROR_MODE | CREATE_NO_WINDOW | DETACHED_PROCESS , 0, 0, &siStartupInfo, &piProcessInfo) != false) { /* Watch the process. */ dwExitCode = WaitForSingleObject(piProcessInfo.hProcess, (2 * 1000)); } else { /* CreateProcess failed */ iReturnVal = GetLastError(); } 

Это сделает процессы yur независимыми. Я надеюсь, это поможет вам.