声明:有些网友有可能在CSDN博客上看到过相同的文章,因为本人有两个账号。。。请不要误会,均为原创

这个程序功能强大哦~~

#include <cstdio>
#include <windows.h>
#include <winbase.h>
#include <wtypes.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <tchar.h>
#include <unistd.h>
#include <sys/types.h>
#define illegal_parameter_value 100000000
#define illegal_parameter_value2 100000001
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"advapi32.lib")
using namespace std;
bool compare(char a[],char b[])
{
if (strlen(a)!=strlen(b)) return false;
for (int i=0;i<strlen(a);i++)
if (a[i]!=b[i] && (a[i]-'a'+'A')!=b[i] && a[i]!=(b[i]-'a'+'A')) return false;
return true;
}
BOOL SetRealTimePriority()
{
if(!SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS )) return false;
return true;
}
BOOL EnableShutdownPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) return false;
if (!LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &sedebugnameValue ) )
{
CloseHandle( hToken );
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken );
return true;
}
BOOL EnableDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if ( ! OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) return false;
if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
{
CloseHandle( hToken );
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken );
return true;
}
BOOL EnableBackupPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if ( ! OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) return false;
if ( ! LookupPrivilegeValue( NULL, SE_BACKUP_NAME, &sedebugnameValue ) )
{
CloseHandle( hToken );
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken );
return true;
}
BOOL EnableRestorePriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if ( ! OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) return false;
if ( ! LookupPrivilegeValue( NULL, SE_RESTORE_NAME, &sedebugnameValue ) )
{
CloseHandle( hToken );
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken );
return true;
}
//------------------------------------------------get_Privileges------------------------------------------------------
DWORD GetProcessID(char *FileName)
{
HANDLE myhProcess;
PROCESSENTRY32 mype;
mype.dwSize = sizeof(PROCESSENTRY32);
BOOL mybRet;
//进行进程快照
myhProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //TH32CS_SNAPPROCESS快照所有进程
//开始进程查找
mybRet=Process32First(myhProcess,&mype);
//循环比较,得出ProcessID
while(mybRet)
{
if(compare(FileName,mype.szExeFile))
return mype.th32ProcessID;
else mybRet=Process32Next(myhProcess,&mype);
}
return illegal_parameter_value;
}
DWORD GetP(DWORD id )
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
pe32.dwSize = sizeof( PROCESSENTRY32 );
do
{
dwPriorityClass = 0;
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );
dwPriorityClass = GetPriorityClass( hProcess );
CloseHandle( hProcess );
if (pe32.th32ProcessID==id) return pe32.th32ParentProcessID;
} while( Process32Next( hProcessSnap, &pe32 ) );
CloseHandle( hProcessSnap );
return 0;
}
int pskill(int id) //根据进程ID杀进程
{
HANDLE hProcess=NULL;
//打开目标进程
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,id);
if (hProcess==NULL) {
if (GetLastError()==5) printf("错误:无法终止PID %d (属于 PID %d 子进程的进程)。\n原因:拒绝访问 :Access is denied\n",id,GetP(id));
else if (GetLastError()==87) printf("错误:未找到进程 :Error to find process %d\n",id);
else printf("错误:未知错误 :Unknown Error %d\n",GetLastError());
return illegal_parameter_value;
}
//结束目标进程
DWORD ret=TerminateProcess(hProcess,0);
Sleep(100);
if(!ret) {
if (GetLastError()==5) printf("错误:无法终止PID %d (属于 PID %d 子进程的进程)。\n原因:拒绝访问 :Access is denied\n",id,GetP(id));
else if (GetLastError()==87) printf("错误:未找到进程 :Error to find process %d\n",id);
else printf("错误:未知错误 :Unknown Error %d\n",GetLastError());
return illegal_parameter_value;
}
return 0;
}
bool check(char x[])
{
for (int i=0;i<strlen(x);i++) if (x[i]<'0' || x[i]>'9') return true;
return false;
}
int main()
{
system("Title ProcessKiller");
system("Mode con cols=87");
system("color 3F"); next:
printf("Loading... Please wait.....");
system("cls");
system("tasklist");
//杀进程
printf("the process's name/id which you want to kill:(直接输入,不区分大小写),键入're'来刷新进程列表:\n");
char a[1000];
scanf("%s",a);
if (strlen(a)==4 && a[0]=='e' && a[1]=='x' && a[2]=='i' && a[3]=='t') exit(0);
if (compare(a,"re")) goto next;
bool symbol = 1;
if (check(a)) symbol=0;
int id = 0;
if (symbol)
{
int i=0;
while (a[i]!='\0')
{
id=id*10+(a[i]-'0');
i++;
}
bool s1=SetRealTimePriority();
bool s2=EnableShutdownPriv();
bool s3=EnableDebugPriv();
bool s4=EnableBackupPriv();
bool s5=EnableRestorePriv();
if (s1==0 || s2==0 || s3==0 || s4==0 || s5==0)
{
printf("错误:ProcessKiller无法终止这个进程\n");
printf("原因:权限不足 Haven't got enough privilliges\n");
printf("请在UAC用户账户控制中更改权限,或与计算机管理员取得联系\n");
getchar();getchar(); exit(5);
}
int ppid=GetP(id);
int f=pskill(id);
if (f==illegal_parameter_value2 || f==illegal_parameter_value) {getchar();getchar();goto next;}
else printf("成功:已终止 PID %d (属于 PID %d 子进程)的进程;\nSuccessful to terminate PID %d(the child process of PID %d)\n",id,ppid,id,ppid);
getchar();getchar();goto next;
} else
{
id=GetProcessID(a);
if (id==illegal_parameter_value)
{
printf("错误:未找到进程 :Error to find proccess '%s'\n",a);
getchar();getchar();goto next;
}
while (id!=illegal_parameter_value)
{
bool s1=SetRealTimePriority();
bool s2=EnableShutdownPriv();
bool s3=EnableDebugPriv();
bool s4=EnableBackupPriv();
bool s5=EnableRestorePriv();
if (s1==0 || s2==0 || s3==0 || s4==0 || s5==0)
{
printf("错误:ProcessKiller无法终止这个进程\n");
printf("原因:权限不足 Haven't got enough privilliges\n");
printf("请在UAC用户账户控制中更改权限,或与计算机管理员取得联系\n");
getchar();getchar(); exit(5);
}
int ppid=GetP(id);
int f=pskill(id);
if (f==illegal_parameter_value2 || f==illegal_parameter_value) {getchar();getchar();goto next;}
else printf("成功:已终止PID %d (属于 PID %d 子进程)的进程;\nSuccessful to terminate PID %d(the child process of PID %d)\n",id,ppid,id,ppid);
id=GetProcessID(a);
}
getchar();getchar();goto next;
}
return 0;
}

  

#include <bits/stdc++.h>#include <windows.h>#include <winbase.h>#include <wtypes.h>#include <tlhelp32.h>#include <psapi.h>#include <tchar.h>#include <unistd.h>#include <sys/types.h>#define illegal_parameter_value 100000000#define illegal_parameter_value2 100000001#pragma comment(lib,"kernel32.lib")#pragma comment(lib,"advapi32.lib") using namespace std; bool compare(char a[],char b[]) { if (strlen(a)!=strlen(b)) returnfalse; for (int i=0;i<strlen(a);i++) if (a[i]!=b[i] && (a[i]-'a'+'A')!=b[i] && a[i]!=(b[i]-'a'+'A')) returnfalse; returntrue; } BOOL SetRealTimePriority() { if(!SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS )) returnfalse; returntrue; } BOOL EnableShutdownPriv() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) returnfalse; if (!LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &sedebugnameValue ) ) { CloseHandle( hToken ); returnfalse; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken ); returntrue; } BOOL EnableDebugPriv() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) returnfalse; if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ) { CloseHandle( hToken ); returnfalse; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken ); returntrue; } BOOL EnableBackupPriv() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) returnfalse; if ( ! LookupPrivilegeValue( NULL, SE_BACKUP_NAME, &sedebugnameValue ) ) { CloseHandle( hToken ); returnfalse; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken ); returntrue; } BOOL EnableRestorePriv() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) returnfalse; if ( ! LookupPrivilegeValue( NULL, SE_RESTORE_NAME, &sedebugnameValue ) ) { CloseHandle( hToken ); returnfalse; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) CloseHandle( hToken ); returntrue; } //------------------------------------------------get_Privileges------------------------------------------------------ DWORD GetProcessID(char *FileName) { HANDLE myhProcess; PROCESSENTRY32 mype; mype.dwSize = sizeof(PROCESSENTRY32); BOOL mybRet; //进行进程快照 myhProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //TH32CS_SNAPPROCESS快照所有进程//开始进程查找 mybRet=Process32First(myhProcess,&mype); //循环比较,得出ProcessIDwhile(mybRet) { if(compare(FileName,mype.szExeFile)) return mype.th32ProcessID; else mybRet=Process32Next(myhProcess,&mype); } return illegal_parameter_value; } DWORD GetP(DWORD id ) { HANDLE hProcessSnap; HANDLE hProcess; PROCESSENTRY32 pe32; DWORD dwPriorityClass; hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); pe32.dwSize = sizeof( PROCESSENTRY32 ); do { dwPriorityClass = 0; hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID ); dwPriorityClass = GetPriorityClass( hProcess ); CloseHandle( hProcess ); if (pe32.th32ProcessID==id) return pe32.th32ParentProcessID; } while( Process32Next( hProcessSnap, &pe32 ) ); CloseHandle( hProcessSnap ); return0; } int pskill(intid) //根据进程ID杀进程 { HANDLE hProcess=NULL; //打开目标进程 hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,id); if (hProcess==NULL) { if (GetLastError()==5) printf("错误:无法终止PID %d (属于 PID %d 子进程的进程)。\n原因:拒绝访问 :Access is denied\n",id,GetP(id)); elseif (GetLastError()==87) printf("错误:未找到进程 :Error to find process %d\n",id); else printf("错误:未知错误 :Unknown Error %d\n",GetLastError()); return illegal_parameter_value; } //结束目标进程 DWORD ret=TerminateProcess(hProcess,0); Sleep(100); if(!ret) { if (GetLastError()==5) printf("错误:无法终止PID %d (属于 PID %d 子进程的进程)。\n原因:拒绝访问 :Access is denied\n",id,GetP(id)); elseif (GetLastError()==87) printf("错误:未找到进程 :Error to find process %d\n",id); else printf("错误:未知错误 :Unknown Error %d\n",GetLastError()); return illegal_parameter_value; } return0; } bool check(char x[]) { for (int i=0;i<strlen(x);i++) if (x[i]<'0' || x[i]>'9') returntrue; returnfalse; } int main() { system("Title ProcessKiller"); system("Mode con cols=87"); system("color 3F"); next: printf("Loading... Please wait....."); system("cls"); system("tasklist"); //杀进程 printf("the process's name/id which you want to kill:(直接输入,不区分大小写),键入're'来刷新进程列表:\n"); char a[1000]; scanf("%s",a); if (strlen(a)==4 && a[0]=='e' && a[1]=='x' && a[2]=='i' && a[3]=='t') exit(0); if (compare(a,"re")) goto next; bool symbol = 1; if (check(a)) symbol=0; intid = 0; if (symbol) { int i=0; while (a[i]!='\0') { id=id*10+(a[i]-'0'); i++; } bool s1=SetRealTimePriority(); bool s2=EnableShutdownPriv(); bool s3=EnableDebugPriv(); bool s4=EnableBackupPriv(); bool s5=EnableRestorePriv(); if (s1==0 || s2==0 || s3==0 || s4==0 || s5==0) { printf("错误:ProcessKiller无法终止这个进程\n"); printf("原因:权限不足 Haven't got enough privilliges\n"); printf("请在UAC用户账户控制中更改权限,或与计算机管理员取得联系\n"); getchar();getchar(); exit(5); } int ppid=GetP(id); int f=pskill(id); if (f==illegal_parameter_value2 || f==illegal_parameter_value) {getchar();getchar();goto next;} else printf("成功:已终止 PID %d (属于 PID %d 子进程)的进程;\nSuccessful to terminate PID %d(the child process of PID %d)\n",id,ppid,id,ppid); getchar();getchar();goto next; } else { id=GetProcessID(a); if (id==illegal_parameter_value) { printf("错误:未找到进程 :Error to find proccess '%s'\n",a); getchar();getchar();goto next; } while (id!=illegal_parameter_value) { bool s1=SetRealTimePriority(); bool s2=EnableShutdownPriv(); bool s3=EnableDebugPriv(); bool s4=EnableBackupPriv(); bool s5=EnableRestorePriv(); if (s1==0 || s2==0 || s3==0 || s4==0 || s5==0) { printf("错误:ProcessKiller无法终止这个进程\n"); printf("原因:权限不足 Haven't got enough privilliges\n"); printf("请在UAC用户账户控制中更改权限,或与计算机管理员取得联系\n"); getchar();getchar(); exit(5); } int ppid=GetP(id); int f=pskill(id); if (f==illegal_parameter_value2 || f==illegal_parameter_value) {getchar();getchar();goto next;} else printf("成功:已终止PID %d (属于 PID %d 子进程)的进程;\nSuccessful to terminate PID %d(the child process of PID %d)\n",id,ppid,id,ppid); id=GetProcessID(a); } getchar();getchar();goto next; } return0; }

C++结束进程 并能显示其父进程的更多相关文章

  1. {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll

    Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...

  2. 父进程结束,其子进程不会结束,会挂到init进程下

    结论:一个父进程产生子进程,父进程结束(kill),子进程不会结束,子进程被init进程托管 下面是过程: d.sh脚本是一个ping命令,执行d.sh 目前,103310 进程为父进程,103344 ...

  3. 显示Linux进程打开了哪些文件? 用lsof命令

    1.lsof abc.txt --> 显示开启文件 abc.txt的进程. 2.lsof -c abc  ---> 显示abc进程现在打开的文件. 3.lsof -c -p 1234 -- ...

  4. Linux基础命令---显示树形进程pstree

    pstree pstree显示正在运行的进程的树形结构,树以PID为根:如果省略了pid则以init为根.如果指定了用户名,则显示根植于该用户拥有的进程的所有进程树.如果pstree被调用为pstre ...

  5. Linux学习笔记--ps命令(显示当前进程的命令)

    ps:英文名process,进程的意思. 1. 命令格式: ps [选项] 2. 经常使用选项: "ps -a" 显示一个终端的全部进程.除了会话引线 "ps -e&qu ...

  6. jps不显示java进程信息

    本来想自己整理,发现已经有前人整理,并且完美解决了我的问题,故转载,感谢分享 转自:http://trinea.iteye.com/blog/1196400 对于jps较熟悉可以直接查看第二部分的分析 ...

  7. 【Linux】进程的结构,创建,结束,以及程序转化为的进程的过程

    本文内容: 1.进程的结构 2.程序转化为进程的过程 3.进程的创建 4.进程的结束 背景知识: 1.进程是计算机中处于运行的程序的实体 2.进程是线程的容器 3.程序本身只是指令,数据以及组织形式的 ...

  8. Linux下进程描述(1)—进程控制块

    进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令 ...

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

    进程查看 ps ax : 显示当前系统进程的列表 ps aux : 显示当前系统进程详细列表以及进程用户 ps ax|less : 如果输出过长,可能添加管道命令 less查看具体进程, 如:ps a ...

随机推荐

  1. vue路由详解

    自己看vue文档,难免有些地方不懂,自己整理一下,主要是vue-router具体实现的操作步骤. 安装 直接下载/CDN https://unpkg.com/vue-router/dist/vue-r ...

  2. iOS 开发 Tips

    1.MVVM 的优点 MVVM 兼容 MVC,可以先创建一个简单的 View Model,再慢慢迁移. MVVM 使得 app 更容易测试,因为 View Model 部分不涉及 UI. MVVM 最 ...

  3. axure原型设计

    在上一个学期的学习中,我们已经初步学习了axure的使用方法,它可以为负责定义需求设计,功能和界面的人员能快速设计出所需产品. 引入:在我们想为软件设计原型的时候,纸质原型很难表达交互的界面,与此同时 ...

  4. 算法(第四版)C# 习题题解——1.3.49 用 6 个栈实现一个 O(1) 队列

    因为这个解法有点复杂,因此单独开一贴介绍. 那么这里就使用六个栈来解决这个问题. 这个算法来自于这篇论文. 原文里用的是 Pure Lisp,不过语法很简单,还是很容易看懂的. 先导知识——用两个栈模 ...

  5. Linux vsftpd 安装配置使用

    1.安装 yum install vsftpd 2.配置 允许root登陆: /etc/vsftpd/user_list文件中把root那一行删除或者注释掉 /etc/vsftpd/ftpusers文 ...

  6. NOIP 2017 逛公园 - 动态规划 - 最短路

    题目传送门 传送门 题目大意 给定一个$n$个点$m$条边的带权有向图,问从$1$到$n$的距离不超过最短路长度$K$的路径数. 跑一遍最短路. 一个点拆$K + 1$个点,变成一个DAG上路径计数问 ...

  7. Eclipse/MyEclipse导入导出注释模板

    1.Eclipse/MyEclipse导入注释模板 (1)打开Eclipse/MyEclipse工具,打开或创建一个Java工程,点击菜单Window->Preferences弹出首选项设置窗口 ...

  8. django url 反响解析,视图

    1. 内容回顾 1. 模板语言(字符串替换) 1. 母版和继承 1. 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件. (比如:导航条和左侧菜单) 2. 子页面如 ...

  9. docker更改默认仓库地址

    zq@ubuntu:~$ docker pull -h Flag shorthand -h has been deprecated, please use --help Usage: docker p ...

  10. idea工具和激活码获取

    1.下载最新的idea https://blog.csdn.net/mashuai720/article/details/79389314 2.获取激活码 最后一个有效,亲测 https://blog ...