【攻防技术系列+Python】-- 用 Python 控制系统进程

news/2024/10/4 17:23:57

用 Python 控制系统进程

由于注册表几乎可以决定整个操作系统的运行,因此它成为安全工具与恶意软件对抗的主要战场之一。除了注册表之外,对系统进程的控制也是安全工具和恶意软件的必争之地。这里我们首先要了解程序和进程的区别。程序是静态的,进程是动态的。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身,用户进程就是所有由用户启动的进程。
psutil 库是一个跨平台库,它能够轻松实现获取系统运行的进程和系统利用率(包括CPU,内存、磁盘、网络等)信息。它主要用于系统监控、性能分析、进程管理等。psutil 库几乎支持当前所有的主流操作系统。使用psutil库查看所有逃程的命令如下。

psutil.pids()

这个函数的返回值为当前运行的进程的pid,在 psutil库中还可以根据一个进程的pid获取以下详细信息。

p = psutil.Process(pid)
p.name()                   #进程名
p.exe()                    #进程的bin路径
p.cwd()                    #进程的工作目录的绝对路径
p.status()                 #进程状态
p.create_time()            #进程创建时间
p.uids()                   #进程的uid信息
p.gids()                   #进程的gid信息
p.cpu_times()              #进程的CPU时间信息
p.memory_percent()         #进程内存利用率

下面我们来编写一个可以列举出操作系统运行的所有进程的程序。

import psutil
print("-----显示所有进程------")
#显示进程信息
pids = psutil.pids()
for pid in pids:p = psutil.Process(pid)#通过pid显示进程名称process_name = p.name()print("Process name is: %s,pid is: %s" % (process_name,pid))

执行该程序之后就可以看到一个类似任务管理器的进程列表,如图7-36所示。

安全工具与恶意软件都会试图去结束对方,如果知道了一个进程的pid或者名称,那么就可以在Python程序中结束它。例如这里我们运行测试程序“测试窗口.exe”,然后启动任务管理器,可以看到它所对应进程的名称,Windows中的任务管理器如图7-37所示。
图]7-37Windows中的任务管理器
这里我们可以使用signal模块来结束整个进程, signal模块负责Python程序内部的信号处理。典型的操作包括信号处理函数、暂停并等待信号,以及定时发出 SIGALRM等。signal模块包含以下方法:

signal.SIGHUP           连接挂断;
signal.SIGILL           非法指令;
signal.SIGINT           终止进程;
signal.SIGTSTP          暂停进程;
signal.SIGKILL          杀死进程(此信号不能被捕获或忽略);
signal.SIGQUIT          终端退出;
signal.SIGTERM          终止信号,软件终止信号;
signal.SIGALRM          闹钟信号,由signal.alarm()发起;
signal.SIGCONT          继续执行暂停进程。

虽然signal模块是Python中的模块,但是其主要面向的是UNIX、Linux 和l macOS等操作系统。由于 Windows内核对信号机制的支持不充分,因此在 Windows中的 Python不能完全发挥信号系统的功能。
我们现在就使用signal模块编写一个结束指定名称进程的程序。

❗管理员权限运行

import psutil
import os
import signalprint("-------------结束进程-------------")
pids = psutil.pids()
for pid in pids:p = psutil.Process(pid)process_name = p.name()if '测试窗口.exe' == process_name:print("结束进程: name(%s)-pid(%s)" % (process_name, pid))os.kill(pid, signal.SIGTERM)exit(0)

执行该程序之后,可以看到它已经成功地结束了“测试窗口.exe”,如图7-38所示。
os模块中提供了一个结束进程的函数os.kill(),该函数模拟传统的UNIX函数发送信号给进程,其中包含两个参数:一个是进程名,即所要接收信号的进程;另一个是所要进行的操作,常用取值为SIGINT(中断进程)、SIGTERM(进程终止信号)和 SIGKILL(杀死进程)。
这里需要注意的一个问题是,虽然 os.kill(pid,signal.SIGINT)成功结束了该进程,但是os.Kill()函数并不能在Windows中正常工作,比如在Windows 中将 signal.SIGINT 替换为SIGKILL,系统就会报错,但是在Linux 中却可以正常运行。所以在 Windows 中可以改用os.popen('taskkill.exe /pid:'+str(pid)来结束一个进程,该方法其实就是使用“taskkill”命令来结束进程的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28906.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

VMware如何将虚拟机的端口服务映射出去

我们有时候在VMware起了一个服务,想要局域网的朋友同事访问 这时候就需要i端口映射 选择NAT模式 VMnet8点击 NAT设置 然后点击添加然后映射传入端口对话框 红色部分是 你主机本机,也就是你在用的电脑的空闲端口(可以打开cmd 输入命令 : netstat -ano 查看已用端口都有哪些…

基于改进MFCC特征和卷积递归神经网络的心音分类

具体的软硬件实现点击http://mcu-ai.com/MCU-AI技术网页_MCU-AI人工智能 心音分类在心血管疾病的早期发现中起着至关重要的作用,特别是对于小型初级卫生保健诊所。尽管近年来心音分类取得了很大进展,但其中大多数都是基于传统的分段特征和基于浅层结构的分类器。这些传统的声…

基于总线设备驱动模型的按键读取驱动程序

本次实验基于总线设备驱动模型实现按键驱动程序的编写,给上层应用程序提供检测按键是否按下的操作接口,上层应用根据按键是否按下控制led的亮灭。所以上层应用程序会同时使用led和按键的驱动接口,但是对于下层驱动而言,这二者是分离的,因此只需要专注于编写按键驱动程序就…

线~段~树

点击查看代码 #include<bits/stdc++.h> #define lson id<<1 #define rson id<<1|1 using namespace std; const int N=1e6+12000; struct node{int l,r,num;int ma,mi; }tr[N<<2]; int a[N]; int n,m; string str; int ans=0; int from,to; void build…

2024 年 5 月 7 日 周二 晴 常(324 字)

正文早上两头跑应付工作时,客户部的同事说我像被吸干了阳气。没办法啊,觉没睡够不就应该这样吗…… 休息好了肯定不这样。另外,才知道这周六补班,那一瞬间有些想死(笑。文竹的末端叶子好像还是没有变绿呢。有些担心。或许应该有点耐心?鱼儿的手机似乎坏了,于是也买了一个…

一种光电容积波PPG 转换到心电图ECG进行房颤检测的神经网络模型

具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 光电体积描记法(PPG)是一种经济有效的非侵入性技术,利用光学方法测量心脏生理学。 PPG 在健康监测领域越来越受欢迎,并用于各种商业和临床可穿戴设备。与心电图(ECG)相比,PPG 并没有提供实质性的…

使用Selenium做网站登录的免验证

我发现,我已经三年多没有更新博客了。这几年一直感觉没什么可写的,工作上没遇到的问题python的不多,主要是前端页面上遇到的问题,感觉写起来比较困难,一写就要贴上去很多代码,还没什么必要,不贴又说不明白,所以干脆不写了。今年换了工作,开始研究新玩意儿了——爬虫。…

线程基本概念

1.进程与线程 1.1 进程进程是资源分配的单位,系统在运行时会为每个进程分配不同的内存区域 1.2 线程线程是调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小。一个Java应用程序java.exe,其实至少有三个线程:main()主线程(受异常影响),gc()…