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 的接口服務的時候遇到的這個需求,使用的目標是從遠端通過發送請求來中止服務器上正在運行的爬蟲程序。

歡迎補充和指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章