【实测】windows下进程的创建和终止-python3

简介: 【实测】windows下进程的创建和终止-python3

因为最近在写的测试平台需要在windows上运行

   所以就来探讨了一下windows的dos命令。


   友情提示(本公众号实测系列请保存成书签,都是原创的宝贵的踩坑经验。比网上那些各种复制粘贴,只言片语,断文取义,不知原理的所谓教程要强得多。)


   首先,在macOs或者linux当中,进程的创建和终止用python3来实现很简单:

mac/linux :


p = subprocess.Popen('python3 test.py‘ , shell=True)


之所以用Popen是因为这是非阻塞的。


仅仅如此简单,就创建了进程。

然后再来看win的创建方法。

win:


p = subprocess.Popen('python3 test.py', shell=True)

   

怎么样,是不是一模一样。是不是都很简单?好,接下来就是分歧了。


当我们创建完以后,若想杀死这个进程。一般会使用进程的pid来杀死该进程。


而获取pid的方式,mac/linux 和 win就完全不同了。


mac/linux:


p = p.pid

很简单,直接拿p的pid就是了。

不过这个方法在win中行不通,因为种种原因,获取到的pid并不是子进程的pid。所以win的方法如下:

win:


res = subprocess.check_output('wmic process where caption="python.exe" get processid,commandline |findstr "%s"'%“关键字”, shell=True)
pid = re.findall(r'(\d+)', str(res))[-1]


如上的命令,首先你要确定你的进程命令主体,在我的举例当中,用的进程是一个python命令,所以要挟“python.exe”


但是为了确保能获取到正确的那个python.exe(因为会有很多)


所以你在一开始的时候,就需要给这个命令后面加上一个关键标识字符串(关键字)

也就是一开始新建进程的时候就应该写成:


p = subprocess.Popen('python3 test.py "关键字"', shell=True)

然后再通过正则和列表提取出真正的pid。


最后来看看,我们拿到了pid后要怎么杀死该进程:

mac/linux:

import os,signal
os.kill(int(pid),signal.SIGKILL)


很简单吧~


再看看win的:


subprocess.call('taskkill /PID %s /F'%pid,shell=True)



好了,到这就说完了。


虽然大家可能在网上搜到不少其他各种各样的方法,但是最好还是实际在终端或cmd中执行一下,亲眼看看它们的输出。

不要直接粘贴复制~

相关文章
|
2月前
|
并行计算 安全 Unix
Python教程第8章 | 线程与进程
本章主要讲解了线程与进程的概念,多线程的运用以及Python进程的相关案例学习
610 0
|
4月前
|
Windows
windows环境下根据端口号查询进程编号并杀掉此进程
windows环境下根据端口号查询进程编号并杀掉此进程
|
4天前
|
监控 Python
python过滤指定进程
python过滤指定进程
12 1
|
12天前
|
消息中间件 Linux 调度
Python的进程锁,进程队列
Python的进程锁,进程队列
122 3
|
12天前
|
数据采集 监控 调度
Python的进程,以及进程同步,守护进程详细解读
Python的进程,以及进程同步,守护进程详细解读
138 4
|
12天前
|
调度 Python 容器
【python】-详解进程与线程
【python】-详解进程与线程
|
17天前
|
消息中间件 安全 调度
Python从入门到精通:3.1.1多线程与多进程——进程和线程的概念
Python从入门到精通:3.1.1多线程与多进程——进程和线程的概念
|
2月前
|
XML Go 数据格式
Windows自定义后台进程并设置为开机启动
可以在`Windows`上配置任意一个可执行文件后台启动,并且设置为开机启动。
Windows自定义后台进程并设置为开机启动
|
2月前
|
Python Java 调度
11 Python 进程与线程编程
11 Python 进程与线程编程
6 0
11 Python 进程与线程编程