Window父进程句柄

应用场景:A进程在程序中通过createprocess启动了B进程,然后调用B进程执行。
          当A进程崩溃时,此时B进程并不知道A进程的状态,导致B进程无法退出。
解决方案:B进程中启动线程不停判断A进程的状态,当判断到A进程不存在时,B进程自动退出。
          判断A进程的状态最好的方法就是调用WaitForSingleObject等待A进程的句柄。
问题:B进程怎么得到A进程的句柄呢?
     在windows中,句柄是和对象一一对应的32位无符号整数值,所以只需要在启动B进程时
 传入A进程的句柄值即可。但是B进程不一定能打开A进程的句柄值,需要处理下。
关键代码:
A进程:DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(),
GetCurrentProcess(), &curProcess, 0,
TRUE, DUPLICATE_SAME_ACCESS) //句柄设置为可继承的
  CreateProcess( NULL, (LPSTR)strCmd.c_str(), NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi )
                                             //子进程继承父进程可继承的句柄       
        B进程:int hand = 0;
               sscanf_s(lpCmdLine, "%d", &hand); //从命令行中获取句柄号
               parentHandle = (HANDLE) hand;
      WaitForSingleObject(parentHandle,timeout)
      CloseHandle(parentHandle);


代码段本人测试在win64调用win32进程可行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值