C++ 实现 查找进程, 杀死进程, 启动进程, 进程重启

头文件:

#include <Windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <ShellAPI.h>

查找进程: 就是调用windowApi遍历所有启动进程,  实现如下

bool FindProcess(std::string strProcessName, DWORD& nPid)
{

	TCHAR tszProcess[64] = { 0 };
	lstrcpy(tszProcess, _T(strProcessName.c_str()));
	//查找进程
	STARTUPINFO st;
	PROCESS_INFORMATION pi;
	PROCESSENTRY32 ps;
	HANDLE hSnapshot;
	memset(&st, 0, sizeof(STARTUPINFO));
	st.cb = sizeof(STARTUPINFO);
	memset(&ps, 0, sizeof(PROCESSENTRY32));
	ps.dwSize = sizeof(PROCESSENTRY32);
	memset(&pi, 0, sizeof(PROCESS_INFORMATION));
	// 遍历进程
	hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hSnapshot == INVALID_HANDLE_VALUE)
		return false;
	if (!Process32First(hSnapshot, &ps))
		return false;
	do {
		if (lstrcmp(ps.szExeFile, tszProcess) == 0)
		{
			//找到制定的程序
			nPid = ps.th32ProcessID;
			CloseHandle(hSnapshot);
			printf("找到进程: %s\n", tszProcess);
			return true;
			//getchar();
			//return dwPid;
		}
	} while (Process32Next(hSnapshot, &ps));
	CloseHandle(hSnapshot);
	return false;
}

  杀死进程: 就是通过遍历所有的启动的进程, 然后查找进程ID, 调用winapi将其杀死, 代码实现如下

bool KillProcess(DWORD dwPid)
{
	printf("Kill进程Pid = %d\n", dwPid); getchar();
	//关闭进程
	HANDLE killHandle = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION |   // Required by Alpha
		PROCESS_CREATE_THREAD |   // For CreateRemoteThread
		PROCESS_VM_OPERATION |   // For VirtualAllocEx/VirtualFreeEx
		PROCESS_VM_WRITE,             // For WriteProcessMemory);
		FALSE, dwPid);
	if (killHandle == NULL)
		return false;
	TerminateProcess(killHandle, 0);
	return true;
}

  启动进程: 就是给出进程名绝对路径, 然后调用winapi启动

bool StartPrcess(std::string strProcessName)
{
	TCHAR tszProcess[64] = { 0 };
	lstrcpy(tszProcess, _T(strProcessName.c_str()));
	//启动程序
	SHELLEXECUTEINFO shellInfo;
	memset(&shellInfo, 0, sizeof(SHELLEXECUTEINFO));
	shellInfo.cbSize = sizeof(SHELLEXECUTEINFO);
	shellInfo.fMask = NULL;
	shellInfo.hwnd = NULL;
	shellInfo.lpVerb = NULL;
	shellInfo.lpFile = tszProcess;						// 执行的程序名(绝对路径)
	shellInfo.lpParameters = NULL;
	shellInfo.lpDirectory = NULL;
	shellInfo.nShow = SW_MINIMIZE;						//SW_SHOWNORMAL 全屏显示这个程序
	shellInfo.hInstApp = NULL;
	printf("程序自动重启中.... \n");
	ShellExecuteEx(&shellInfo);

	return true;
}

  

程序重启流程: 1: 先查找需要重启的程序进程Id

        2: 启动需要重启的程序

        3: 杀死第一步的进程id

代码上面已实现

原文地址:https://www.cnblogs.com/hul201610101100/p/10069310.html

时间: 2024-08-27 18:01:41

C++ 实现 查找进程, 杀死进程, 启动进程, 进程重启的相关文章

jenkins中通过execute shell启动的进程会被杀死的问题

在jenkins中配置自动更新部署项目时,如果采取用execute shell启动/关闭tomcat,会发现可以进行关闭tomcat, 但是无法启动tomcat,虽然构建会显示执行成功,但是查看进程,tomcat是没有启动的.这是因为Jenkins默认 会在Build结束后Kill掉所有的衍生进程.需要进行以下配置,才能避免此类情况发生: 1.重设环境变量build_id 在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的tomcat

Play Framework Web开发教程(19): 任务–启动一些进程

有些时候,一个Web应用有需要在正常的请求-响应周期之外执行一些代码,比如一些常时间运行的后台任务,或者也是在请求-响应周期中执行,但无需用户交互.比如我们回到之前的产品分类的例子,我们需要跟踪订单是否有人拣选,打包了和发货了.拣选货物涉及了某个人根据订单在仓库中查找订单中的物品,然后可以打包这些货品,交给物流发货.一个实现方法是生成新图所示的货品目录的物品拣选单(和HTML表单无关). 在过去很长的一段时间内,系统构架都假定这些任务都在Web应用外实现,比如在一些旧系统中的批量任务生成. 而今

Nginx源码分析:3张图看懂启动及进程工作原理

编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享.转载请注明来自高可用架构公众号「ArchNotes」.   导读:很多工程师及架构师都希望了解及掌握高性能服务器开发,阅读优秀源代码是一种有效的方式,nginx 是业界知名的高性能 Web 服务器实现,如何有效的阅读及理解 nginx?本文用图解的方式帮助大家来更好的阅读及理解 nginx 关键环节的实现.   陈科,十年行业从业经验,曾在浙江电信.阿里巴巴.华为.五八同城任开发工程及架构师等职,目前负责河狸

linux -- 进程的查看、进程id的获取、进程的杀死

进程查看 ps ax : 显示当前系统进程的列表 ps aux : 显示当前系统进程详细列表以及进程用户 ps ax|less : 如果输出过长,可能添加管道命令 less查看具体进程, 如:ps ax|grep XXX(XXX为进程名称) 获取进程id shell获取进程ID的方法: ps -A |grep "cmdname"| awk '{print $1}' pidof "cmdname" pgrep "cmdname" 这三种在bash和

Windows中杀死某个端口的进程

最近写项目,总是出现端口被占用的问题,原来傻傻的把电脑重启一下,终于有一天受不了了,想要想办法解决.刚开始从网上找了好多教程,发现不行.开始自己尝试,终于,成功的将占用端口的进程杀掉.在此记录下过程(以8080端口为例): 第一步,打开cmd命令窗口,输入命令,根据端口号查找对应的进程号 netstat -ano | findstr 80 //列出进程极其占用的端口,且包含 80 1 结果如下:  发现 8080 端口被 PID(进程号)为 9268 的进程占用. 第二步, 据进程号寻找进程名称

进程监控工具supervisor 启动Mongodb

一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的client/server系统,可以管理和监控*nix上面的进程.不过同daemontools一样,它也不能监控daemon进程 官网:http://supervisord.org/ 二为啥用supervisor 部署简单 : 为啥简单呢?因为咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/re

Android 子Activity组件在进程内的启动过程 &amp;&amp; 子Activity组件在新进程中的启动过程

1.子Activity组件在进程内的启动过程 在Android Activity组件的启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文中,我们已经详细分析了Activity的启动过程,对于子Activity组件在进程内的启动过程,我们只分析它们之间的不同. 主要是2处,1是不需要创建新的任务栈,2是不需要创建新进程和子线程. 第1点,体现在如下代码上: -/Android/frameworks/base/services/ja

Jenkins启动守护进程后台持续运行

在使用jenkins的时候,我们可能有这样的需求,希望jenkins启动的进程在后台持续运行,不阻塞jenkins的构建.1.136版本之前的jenkins不满足这种需求,1.136之后的版本支持. 为什么jenkins的进程是阻塞的? jenkins主进程和它所启动的子进程通过stdin.stdout.stderr这三个管道相互联系.也因为这样,jenkins可以打印所有进程的日志.子进程可能打印海量的日志,然后结束,但是jenkins主进程要保证所有的子进程通道关闭后,才能认为本次build

实现chrome扩展启动本地进程 - 补充

实现chrome扩展启动本地进程 - 补充 标签: chrome扩展启动本地程序访问本地磁盘 2014-10-17 11:42 6753人阅读 评论(17) 收藏 举报  分类: Chrome Plugin 版权声明:本文为博主原创文章,未经博主允许不得转载. 示例 主要包含如下部分 com.google.chrome.demo-win.json native_cmd.bat manifest.json popup.html popup.js 功能简介: 实现一个扩展,用户点击一个按钮后会启动本