当前位置:编程学习 > C/C++ >>

\c语言\ _\结束进程\

输入某进程,然后结束!就是输入进程名然后结束,给可例子可以吗?
补充:api的吧!给个例子易懂的
追问:希望和你结识!虽然看不懂,但有益于研究。
答案:
原创!参考msdn写的:

#include <windows.h>
#include <psapi.h>
#include <stdio.h>

#pragma comment(lib, "psapi.lib")

char* PrintProcessNameAndID(DWORD pid)
{
static char szProcessName[MAX_PATH];
HMODULE hModule;
DWORD cbNeeded;
HANDLE hProcess;

strcpy(szProcessName, "<unknown>");
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);


if(hProcess != NULL) {
if(EnumProcessModules(hProcess, &hModule, sizeof(hModule), &cbNeeded))
GetModuleBaseName(hProcess, hModule, szProcessName, sizeof(szProcessName));
} else
return NULL;
CloseHandle(hProcess);

return szProcessName;
}

int main()
{

DWORD aProcesses[1024], cbNeeded, cProcesses, i, dwTargetPID;
char szTarget[512], *p, input;

HANDLE hTarget;

printf("请输入你要终止的进程名:");
fgets(szTarget, 512, stdin);
*strchr(szTarget, '\n') = '\0';

if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
return 0;

cProcesses = cbNeeded / sizeof(DWORD);

for (i = 0; i < cProcesses; i++)
if(aProcesses[i] != 0 && (p = PrintProcessNameAndID(aProcesses[i])) != NULL)
{
if(_stricmp(szTarget, p) == 0)
{
hTarget = OpenProcess(PROCESS_TERMINATE, FALSE, aProcesses[i]);
if(hTarget == NULL) {
printf("进程 %s 无法访问.\n", szTarget);
break;
}
printf("确认终止进程: %s 吗? PID:%d (Y/N):", szTarget, aProcesses[i]);
input = getchar();
if(input == 'y' || input == 'Y') {
if(TerminateProcess(hTarget, 0)) {
printf("进程终止成功!\n");
} else {
printf("进程终止失败...\n");
}
}
CloseHandle(hTarget);
break;
}
}
if(i == cProcesses)
printf("没有找到进程:%s\n", szTarget);
return 0;
}
哇,用dos命令行不?不然你就要调用winAPI了。
首先确定进程空间,然后查找到进程的句柄,在用某个系统调用结束它。
在现代计算机系统中,进程管理是操作系统的工作,所以就必须进行系统调用才能结束进程,这就涉及到了你的具体环境,比如是Win32的API还是Linux下的C编程,他们的方法是不同的。

上一个:c语言中的c是什么意思
下一个:怎么学习电脑中C语言咯?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,