CreateProcess 终止进程

最近需要用到,稍微研究了下。
1. 供CreateProcess启动的进程test.exe,只是打印出参数而已。

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{   
    cout<<"Args count:"<<argc<<endl;
    for(int i=0;i<argc;i++){
        cout<<"args"<<i<<"="<<argv[i] <<endl;   
    }

    int arg1 = atoi(argv[1]);
    string str = argv[2];
    cout<<arg1<<"---"<<str<<endl;

    getchar();
    return 0;
}
  1. 程序
// CreateProcess.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <windows.h> 
#include <stdio.h> 

int main(int argc, char* argv[]) 
{
    STARTUPINFO si = { sizeof(si) }; 
    PROCESS_INFORMATION pi; 

    si.dwFlags = STARTF_USESHOWWINDOW; 
    si.wShowWindow = true; //TRUE表示显示创建的进程的窗口
    TCHAR cmdName[] =TEXT("d://test.exe");
    TCHAR cmdline2[] =TEXT("12 34 56 88");//参数
    int p1 = 66;char p2[] = "53";int p3 = 99;
    sprintf(cmdline2,"%d %s %d",p1,p2,p3);//格式化参数
    BOOL bRet = ::CreateProcess ( 
        cmdName,
        cmdline2, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改     
        NULL, 
        NULL, 
        FALSE, 
        CREATE_NEW_CONSOLE, 
        NULL, 
        NULL, 
        &si, 
        &pi); 

    int error = GetLastError();
    if(bRet) 
    {
        printf("新进程的进程ID号:%d \n", pi.dwProcessId); 
        printf("新进程的主线程ID号:%d \n", pi.dwThreadId); 
    } 
    else
    {
        printf("error code:%d\n",error );
    }
    Sleep(2000);
    TerminateProcess(pi.hProcess, 0);//终止进程
    ::CloseHandle (pi.hThread); 
    ::CloseHandle (pi.hProcess); 
    return 0; 
} 

/*
1. 直接启动进程,不等待执行完成
BOOL ret = CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 
if (ret) { 
    // 关闭子进程的主线程句柄 
    CloseHandle(pi.hThread); 
    // 关闭子进程句柄 
    CloseHandle(pi.hProcess); 
} 
2. 等待执行完成
BOOL ret = CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 
if (ret) { 
    // 关闭子进程的主线程句柄 
    CloseHandle(pi.hThread); 
    // 等待子进程的退出 
    WaitForSingleObject(pi.hProcess, INFINITE); 
    // 获取子进程的退出码 
    GetExitCodeProcess(pi.hProcess, &dwExitCode); 
    // 关闭子进程句柄 
    CloseHandle(pi.hProcess); 
} 
//*/
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值