Как выйти из запущенной партии? - PullRequest
0 голосов
/ 17 мая 2019

Рассмотрим следующую программу:

main(){system("start /b batch.bat");}

Я хочу завершить пакет и любые процессы, порожденные им позже в моей программе - есть идеи?

1 Ответ

1 голос
/ 17 мая 2019

Я хочу завершить пакет и все процессы, порожденные им, когда-нибудь

для этого существует Объекты заданий :

AОбъект задания позволяет управлять группами процессов как единым целым.

Чтобы завершить все процессы, в настоящее время связанные с объектом задания, используйте функцию TerminateJobObject .

if (HANDLE hJob = CreateJobObjectW(0, 0))
{
    WCHAR ApplicationName[MAX_PATH];
    if (GetEnvironmentVariableW(L"ComSpec", ApplicationName, RTL_NUMBER_OF(ApplicationName)))
    {
        PROCESS_INFORMATION pi;
        STARTUPINFOW si = { sizeof(si) };
        if (CreateProcessW(ApplicationName, L"cmd /c <some path>/batch.bat", 
                0, 0, 0, CREATE_SUSPENDED, 0, 0, &si, &pi))
        {
            if (AssignProcessToJobObject(hJob, pi.hProcess))
            {
                ResumeThread(pi.hThread);
            }
            else
            {
                TerminateProcess(pi.hProcess, 0);
            }
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
        }
    }

    // .. wait for something ...
    TerminateJobObject(hJob, 0);
    CloseHandle(hJob);
}

однако новые процессы могут быть запущены, скажем, через удаленный комзвонки (StartService например) - формально из другого процесса.это, конечно, не будет в работе и не прекращается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...