C/C++结束指定进程

C/C++结束指定进程

起因:ZZ室友最近沉迷吃鸡,没日没夜的和他的小伙伴开黑,严重影响到了寝室静谧,美好,热爱“学习”的氛围!突发奇想,给他电脑发个程序,当吃鸡吃到一半的时候,自动结束吃鸡进程,岂不美哉,哈哈,纯属说笑,并不会真的搞事情,开机自动运行没有加上,但是这个需求在脑海中形成想实现,正好巩固一下win32编程,废话不多,上代码!
#include"stdafx.h"
#include <stdio.h>  
#include <windows.h>  
#include <TlHelp32.h>  
#include <stdlib.h>
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )	//隐藏运行的控制台窗口
  
int Kill_Pro(TCHAR Kill_Name[])		//功能函数。参数是进程名
{
	while(1){		//死循环为了一直获取当前系统正在运行的进程
    // 为进程的所有线程拍个快照  
    HANDLE hSnapshort = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
    if( hSnapshort==INVALID_HANDLE_VALUE )  
    {  
        printf("CreateToolhelp32Snapshot调用失败!\n");  
        return -1;  
    }  
  
    // 获得线程列表  
    PROCESSENTRY32 stcProcessInfo;  
    stcProcessInfo.dwSize = sizeof(stcProcessInfo);  
    BOOL  bRet = Process32First(hSnapshort, &stcProcessInfo);  
    while (bRet)  
    {  
		if(strcmp(stcProcessInfo.szExeFile,Kill_Name)==0)
		{	
			Sleep(2000);		//等待时间
            HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,stcProcessInfo.th32ProcessID);	//获取进程句柄
            ::TerminateProcess(hProcess,0);    //结束进程
            CloseHandle(hProcess);		
		}
        bRet = Process32Next(hSnapshort, &stcProcessInfo);  
    }  
  
    CloseHandle(hSnapshort);  

	}
	return 0;
}

int main()   //主函数
{  
	Kill_Pro("editplus.exe");
    return 0;  
}
提醒:宿舍和谐还是很重要的,切勿伤了和气!
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
设计思路: 本文将介绍如何使用C/C++编写一个多客户端并发访问服务器的网络服务能力测试工具。该工具可以模拟多个客户端同时向服务器发送请求,测试服务器的并发处理能力。 1.服务器端: (1)创建套接字 (2)绑定地址和端口 (3)监听连接 (4)接受连接请求 (5)创建子进程,子进程与客户端通信 (6)关闭套接字 2.客户端: (1)创建套接字 (2)连接服务器 (3)发送请求 (4)接收响应 (5)关闭套接字 实现步骤: 1.服务器端: (1)创建套接字: 使用socket函数创建套接字。代码如下: ``` int server_socket = socket(AF_INET, SOCK_STREAM, 0); ``` (2)绑定地址和端口: 使用bind函数将套接字与指定的地址和端口绑定。代码如下: ``` struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)); ``` (3)监听连接: 使用listen函数开始监听连接请求。代码如下: ``` listen(server_socket, 5); ``` (4)接受连接请求: 使用accept函数接受连接请求,并创建子进程处理连接。代码如下: ``` while(1) { int client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &client_len); if(fork() == 0) { // 子进程处理连接 close(server_socket); // ... exit(0); } close(client_socket); } ``` (5)创建子进程,子进程与客户端通信: 在子进程中,使用recv函数接收客户端发送的请求,使用send函数向客户端发送响应。代码如下: ``` while(1) { char buffer[BUFFER_SIZE]; int len = recv(client_socket, buffer, BUFFER_SIZE, 0); if(len == 0) break; // 处理请求 send(client_socket, response, strlen(response), 0); } ``` (6)关闭套接字: 在服务器结束时,使用close函数关闭套接字。代码如下: ``` close(server_socket); ``` 2.客户端: (1)创建套接字: 使用socket函数创建套接字。代码如下: ``` int client_socket = socket(AF_INET, SOCK_STREAM, 0); ``` (2)连接服务器: 使用connect函数连接服务器。代码如下: ``` struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); server_addr.sin_port = htons(PORT); connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)); ``` (3)发送请求: 使用send函数向服务器发送请求。代码如下: ``` send(client_socket, request, strlen(request), 0); ``` (4)接收响应: 使用recv函数接收服务器的响应。代码如下: ``` char buffer[BUFFER_SIZE]; recv(client_socket, buffer, BUFFER_SIZE, 0); ``` (5)关闭套接字: 在客户端结束时,使用close函数关闭套接字。代码如下: ``` close(client_socket); ``` 完整代码: 服务器端: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8080 #define BUFFER_SIZE 1024 int main() { int server_socket = socket(AF_INET, SOCK_STREAM, 0); if(server_socket == -1) { perror("socket"); exit(1); } struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); if(bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); exit(1); } if(listen(server_socket, 5) == -1) { perror("listen"); exit(1); } while(1) { struct sockaddr_in client_addr; socklen_t client_len = sizeof(client_addr); int client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &client_len); if(client_socket == -1) { perror("accept"); exit(1); } if(fork() == 0) { close(server_socket); while(1) { char buffer[BUFFER_SIZE]; int len = recv(client_socket, buffer, BUFFER_SIZE, 0); if(len == 0) break; // 处理请求 char* response = "Hello, World!"; send(client_socket, response, strlen(response), 0); } close(client_socket); exit(0); } close(client_socket); } close(server_socket); return 0; } ``` 客户端: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <arpa/inet.h> #define SERVER_IP "127.0.0.1" #define PORT 8080 #define BUFFER_SIZE 1024 int main() { int client_socket = socket(AF_INET, SOCK_STREAM, 0); if(client_socket == -1) { perror("socket"); exit(1); } struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); server_addr.sin_port = htons(PORT); if(connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { perror("connect"); exit(1); } char* request = "Hello!"; send(client_socket, request, strlen(request), 0); char buffer[BUFFER_SIZE]; recv(client_socket, buffer, BUFFER_SIZE, 0); printf("%s\n", buffer); close(client_socket); return 0; } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值