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实际机制可能有出入 ...
随机推荐
- [转帖]Linux:crontab要点整理(表达式,转义,权限管理,日志)
https://www.jianshu.com/p/fd46652f247e 摘要:Linux,crontab整理crontab的使用,包括cron表达式,设置和删除任务,权限管理,查看日志 cron ...
- [转帖]docker build 中的 -f 选项
https://www.jianshu.com/p/06c35fd299b7 需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 D ...
- [转帖]查看x86 cpu睿频命令
查看cpu是否开启睿频,offline掉一些cpu核心后,查看cpu睿频是否升高? turbostat统计X86 处理器的频率.空闲状态.电源状态.温度等状态等 [root@rootbird~]# t ...
- 浅谈基于Web的跨平台桌面应用开发
作者:京东物流 王泽知 近些年来,跨平台跨端一直是比较热门的话题,Write once, run anywhere,一直是我们开发者所期望的,跨平台方案的优势十分明显,对于开发者而言,可以做到一次开发 ...
- 【K哥爬虫普法】孤注一掷的爬虫er,究竟还要误入歧途多远?
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- 【JS 逆向百例】转变思路,少走弯路,X米加密分析
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:X米账号登 ...
- 从Spring源码看Spring如何解决循环引用的问题
Spring如何解决循环引用的问题 关于循环引用,首先说一个结论: Spring能够解决的情况为:两个对象都是单实例.且通过set方法进行注入. 两个对象都是单实例,通过构造方法进行注入,Spring ...
- TienChin 活动管理-添加活动接口
ActivityController @PreAuthorize("hasPermission('tienchin:activity:create')") @Log(title = ...
- go中的sync.RWMutex源码解读
读写锁 前言 什么是读写锁 看下实现 读锁 RLock RUnlock 写锁 Lock Unlock 问题要论 写操作是如何阻止写操作的 写操作是如何阻止读操作的 读操作是如何阻止写操作的 为什么写锁 ...
- mermaid图详解(一)流程图|超详细的代码解释
本文参考Github项目 https://github.com/mermaid-js/mermaid/ 前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客 ...