Python 获取进程 pid 以及停止进程

mywang88

2019-01-23

简介

在 Python 的项目开发中,程序有时会需要管理(例如停止)其它后台进程。

可以通过 os.getpid() 函数以及 os.system() 来实现这一功能。

示例

在同一个目录下创建 3 个脚本文件:

1 要停止的进程

创建脚本文件 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)

运行这个脚本,这样就得到了一个在后台持续运行的进程。

2 用来停止进程的函数

创建脚本文件 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() 函数,即可中止指定进程。

3 控制程序

创建脚本文件 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 的接口服务的时候遇到的这个需求,使用的目标是从远端通过发送请求来中止服务器上正在运行的爬虫程序。

欢迎补充和指正。

  • 8
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值