TerminateJobObject是使用
注意: AssignProcessToJobObject仅适用于win32 desktop app, 比如notepad是适用的,calculator是不适用的
下面的demo是将notepad的句柄分配给作业,然后由TerminateJobObject统一kill
#define _CRT_SECURE_NO_WARNINGS #include<iostream>
#include<windows.h>
using namespace std; bool ExecuteSoftware(HANDLE * hSoftwareJob, char * name, const int countExecute);
void KillProcess(HANDLE hSoftwareJob);
int main()
{
HANDLE notepadJob;
const int SIZE_NOTE = 3;
notepadJob = CreateJobObject(NULL, NULL); cout << "Execute WordPad\n";
if (!ExecuteSoftware(¬epadJob, const_cast<char*>("notepad.exe"), SIZE_NOTE))
{
cout << "Can't execute all process\n";
Sleep(1500);
} cout << "Killing groups\n"; KillProcess(notepadJob); Sleep(2500); return 0;
} bool ExecuteSoftware(HANDLE * hSoftwareJob, char * name, const int countExecute)
{
STARTUPINFO si;
LPTSTR lpszSystemInfo;
PROCESS_INFORMATION pi;
TCHAR tchBuff[MAX_PATH + 1]; lpszSystemInfo = tchBuff;
GetSystemDirectory(lpszSystemInfo, MAX_PATH + 1);
wsprintf(tchBuff, "%s\\%s", lpszSystemInfo, name); ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi)); for (int i = 0; i < countExecute; i++)
{
if (!CreateProcess(NULL, tchBuff, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &si, &pi)) //CREATE_BREAKAWAY_FROM_JOB是必需的
{
return false;
}
else
{
AssignProcessToJobObject(*hSoftwareJob, pi.hProcess);
int err = GetLastError();
}
} return true;
} void KillProcess(HANDLE hSoftwareJob)
{
TerminateJobObject(hSoftwareJob, 0);
int err = GetLastError();
}
有意思的是如果使用openprocess获取计算器的句柄,然后将句柄传递给AssignProcessToJobObject,同样也可以被TerminateJobObject杀掉进程。
不过测试之后发现createprocess得到的processid与任务管理器中看到的pid不一样,也就是如果createprocess得到的Pid传给openprocess之后,获取的新句柄将无法使用。
TerminateJobObject是使用的更多相关文章
- 英文不好也能快速"记忆" API
英文不好不要紧,把API函数导入打字练习类软件,即是练习打字速度,提高编程效率:也能短时间记忆API. 坚持每天打一遍,约2小时,连续打两周,会对API有很好的记忆,此方法是结合英文学习方法!以下是W ...
- Windows作业
1.什么是Windows作业 Windows作业实际上一个进程组,可以给作业设置权限,一旦进程加入到作业内,进程的权限将会被作业限制. 2.创建一个作业 HANDLE CreateJobObject( ...
- 走进windows编程的世界-----windows进程
Windows进程 1 Windows进程 进程是一个容器,包括了一个应用程序实例的各种资源.Windows多任务的操作系统,因此能够同一时候运行多个进程. 2 Windows进程的 ...
- windows 下进程池的操作
在Windows上创建进程是一件很容易的事,但是在管理上就不那么方便了,主要体现在下面几个方面: 1. 各个进程的地址空间是独立的,想要在进程间共享资源比较麻烦 2. 进程间可能相互依赖,在进程间需要 ...
- Windows Internals 笔记——作业
1.Windows提供了一个作业内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么.创建只包含一个进程的作业同样非常有用,因为这样可以对进程施加平时不能施加的限制. 2.如果进 ...
- 《Windows核心编程》读书笔记 上
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...
- Windows核心编程:第5章 作业
Github https://github.com/gongluck/Windows-Core-Program.git //第5章 作业.cpp: 定义应用程序的入口点. // #include &q ...
- C++Windows核心编程读书笔记
转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...
- Windows核心编程-作业
原文链接:http://zhujiangtao.com/?p=983 作业 作业 一个简单例程 CreateJobObject 创建作业 作业限制和 SetInformationJobObject A ...
- 【转】《windows核心编程》读书笔记
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...
随机推荐
- [转帖]Jmeter中线程组和setUP线程组、tearDown线程组的区别
JMETER: setUP线程组:在测试任务ThreadGroup 运行前先被运行.通常用在运行测试任务前,做初始化工作.例如建立数据库连接初始分化工作.用户登录 tearDown线程组:在测试任务线 ...
- 【转帖】nginx变量使用方法详解-8
https://www.diewufeiyang.com/post/582.html 与 $arg_XXX 类似,我们在 (二) 中提到过的内建变量 $cookie_XXX 变量也会在名为 XXX 的 ...
- [转帖]Megacli 错误码
MegaCLI Error Messages 0x00 Command completed successfully 0x01 Invalid command 0x02 DCMD opcode is ...
- [转帖]AMD第四代宵龙 9174F 亮眼
https://www.amd.com/zh-hans/processors/epyc-9004-series#%E8%A7%84%E6%A0%BC 型号规格 型号 CPU 核心数量 线程数量 最 ...
- [转帖]一个故事看懂CPU的TLB
https://www.cnblogs.com/xuanyuan/p/15347054.html Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了- 我所在的CPU是一个八核CPU,就有八个 ...
- VM PowerCli的简单安装和使用学习
1. Win10 上面安装 下载 zip包并且进行安装 win10 已经带了powershell 安装比较简单, 只不过安装时会提示 powershell的权限有问题需要打开powershell 执行 ...
- redis-shake
https://github.com/alibaba/RedisShake/wiki/%E8%BF%90%E8%A1%8C%E7%9B%91%E6%8E%A7 redis-shake is a too ...
- SUBMIT指定用户名错误
1.SUBMIT说明 在ABAP中,SUBMIT关键字用于运行另一个ABAP程序.通过SUBMIT关键字,可以在当前程序内部调用其他程序,而无需关闭当前程序. SUBMIT语句的一般语法如下: &qu ...
- 配置elementuI菜单
:unique-opened="true" 只保留一个菜单 :router="true"开启路由标识 index="users" 是标识 它 ...
- # 继续前行github star突破8k即时通讯IM开源项目OpenIM版本发布计划
项目简介 OpenIM继续领跑开源IM领域,在广大开发者的支持下,目前github star突破8k.在数据泄露.信息外泄.隐私滥用的时代,IM私有化部署需求旺盛.其中,政企协同办公对IM需求猛增,随 ...