创建无法正常工作后终止进程

时间:2019-08-07 04:17:31

标签: visual-c++

我已经以某种方式编写了一个程序来生成一个进程,但是无法在2秒后自动将其杀死(实际上并没有杀死):

void createproc() {
    //WaitForSingleObject(&processInfo.hProcess, INFINITE)

    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    wchar_t commandline_args[] = L"\"C:\\ddnvnc\\WebServer.exe\" ";

    if (!CreateProcess(NULL,   // No module name (use command line)
        commandline_args,        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi)           // Pointer to PROCESS_INFORMATION structure
        )
    {

        printf("CreateProcess failed (%d).\n", GetLastError());
        MessageBox(NULL,
        _T("Failed"),
            _T("Windows Desktop Guided Tour"),
            NULL);
    }

    Sleep(2000);
    CloseHandle(&pi.hThread);
    TerminateProcess(&pi.hProcess,0);



    MessageBox(NULL,
        _T("KIlled"),
        _T("Windows Desktop Guided Tour"),
        NULL);


}

我想要的是在2秒钟后生成并杀死进程,这将是无限循环。

1 个答案:

答案 0 :(得分:0)

CloseHandle(&pi.hThread);
TerminateProcess(&pi.hProcess,0);

使用pi.hThread代替&pi.hThread。请注意,顺序应相反。

您可以使用WaitForSingleObject代替Sleep,并且仅在尚未终止过程(例如,由用户终止)的情况下终止该过程

//Sleep(2000);
//TerminateProcess(pi.hProcess, 0);

if(WaitForSingleObject(pi.hProcess, 1000) == WAIT_TIMEOUT)
    TerminateProcess(pi.hProcess, 0);

CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);