\c语言\ _\结束进程\
输入某进程,然后结束!就是输入进程名然后结束,给可例子可以吗?
补充:api的吧!给个例子易懂的
追问:希望和你结识!虽然看不懂,但有益于研究。
输入某进程,然后结束!就是输入进程名然后结束,给可例子可以吗?
补充: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语言咯?