mywang88
2019-01-23
在 Python 的项目开发中,程序有时会需要管理(例如停止)其它后台进程。
可以通过 os.getpid()
函数以及 os.system()
来实现这一功能。
在同一个目录下创建 3 个脚本文件:
创建脚本文件 count.py
,内容如下:
import time
import os
# 获取进程的pid
pid = os.getpid()
print('pid: ', pid)
# 将pid写入本地文件
f1 = open(file='count_pid.txt', mode='w')
f1.write(pid.__str__())
f1.close()
# 开始计数并打印
n = 0
while True:
n += 1
print(n)
time.sleep(1)
运行这个脚本,这样就得到了一个在后台持续运行的进程。
创建脚本文件 kill.py
,内容如下:
import os
def kill(pid):
# 本函数用于中止传入pid所对应的进程
if os.name == 'nt':
# Windows系统
cmd = 'taskkill /pid ' + str(pid) + ' /f'
try:
os.system(cmd)
print(pid, 'killed')
except Exception as e:
print(e)
elif os.name == 'posix':
# Linux系统
cmd = 'kill ' + str(pid)
try:
os.system(cmd)
print(pid, 'killed')
except Exception as e:
print(e)
else:
print('Undefined os.name')
从其它程序中调用这个脚本中定义的 kill()
函数,即可中止指定进程。
创建脚本文件 manager.py
,内容如下:
from kill import kill
# 读取pid
f1 = open(file='count_pid.txt', mode='r')
pid = f1.read()
f1.close()
# 调用kill函数,终止进程
kill(pid=pid)
运行这个脚本,就可以读取到 count.py
对应进程的 pid ,并通过它中止该进程。
本文使用的 Python 版本为 3.7.2 。
本文示例在 PyCharm 中运行,因此 count.py
实际上只能算是“持续运行”,而非“后台运行”。
如果要后台运行,在 Linux 系统下可使用 nohup
命令;在 Windows 系统下可另开一个命令提示符。
笔者是在开发一个 flask-restful 的接口服务的时候遇到的这个需求,使用的目标是从远端通过发送请求来中止服务器上正在运行的爬虫程序。
欢迎补充和指正。