在程序運行的過程中,有時候需要關閉進程,例如用戶不再需要程序運行或程序出現異常等情況。Python提供了多種方式來關閉進程,可以通過在命令行中直接輸入ctrl+c或者在程序中使用系統庫函數等方式來實現。本文將從多個方面介紹Python關閉進程的幾種方法。
一、使用KeyboardInterrupt信號關閉進程
KeyboardInterrupt信號可以通過ctrl+c鍵來發送,進程接收到該信號後會立即停止運行。
import time
try:
while True:
print("程序正在運行......")
time.sleep(1)
except KeyboardInterrupt:
print("進程被終止!")
該程序不斷輸出”程序正在運行……”,直到接收到KeyboardInterrupt信號時停止運行。
二、使用multiprocessing庫關閉進程
multiprocessing庫是Python自帶的一個多進程處理模塊,其中的Process類提供terminate()函數來停止進程運行。
import multiprocessing
import time
def func():
while True:
print("程序正在運行......")
time.sleep(1)
if __name__ == '__main__':
p = multiprocessing.Process(target=func)
p.start()
time.sleep(5)
p.terminate()
print("進程被終止!")
該程序使用Process類創建進程,通過terminate()函數停止進程運行。程序運行5秒後停止運行。
三、使用os庫關閉進程
os.kill()函數可以向指定進程發送信號,這裡使用signal.SIGTERM作為信號來停止進程運行。
import os
import time
import signal
def func():
while True:
print("程序正在運行......")
time.sleep(1)
if __name__ == '__main__':
pid = os.getpid()
p = os.getpgid(pid)
print("父進程ID:%d" % os.getppid())
print("當前進程ID:%d" % pid)
print("當前進程組ID:%d" % p)
time.sleep(5)
os.kill(pid, signal.SIGTERM)
print("進程被終止!")
該程序使用os庫的getpid()函數獲得當前進程ID,getpgid()函數獲得當前進程組ID,kill()函數向進程發送SIGTERM信號停止進程運行。
四、使用subprocess庫關閉進程
subprocess庫可以在新進程中運行程序,同時還提供了kill()函數來停止該進程運行。
import subprocess
import time
p = subprocess.Popen(["ping","127.0.0.1"])
time.sleep(5)
p.kill()
print("進程已被殺死!")
該程序在新進程中運行ping命令,經過5秒後通過kill()函數關閉進程。
五、使用signal庫關閉進程
signal庫提供kill()函數來向指定進程發送信號,這裡使用SIGINT信號來停止進程運行。
import signal
import time
def sigint_handler(signum, frame):
print("進程接收到停止信號!")
exit()
# 註冊信號回調處理函數
signal.signal(signal.SIGINT, sigint_handler)
while True:
print("程序正在運行......")
time.sleep(1)
該程序使用signal庫的signal()函數註冊回調處理函數,當接收到SIGINT信號時,運行回調函數停止程序運行。
六、結論
本文介紹了Python關閉進程的幾種方法,包括使用KeyboardInterrupt信號、multiprocessing庫、os庫、subprocess庫和signal庫等多種方式,讀者可以根據實際情況選擇合適的方式來停止進程運行。
原創文章,作者:EQXL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133698.html