[英]Process not terminating
我正在嘗試通過使用多處理庫創建一個進程在后台運行所有mp3文件。
import os
import subprocess
from multiprocessing import Process
def music_player():
music_folder = "/home/pi/Music/"
files = os.listdir(music_folder)
for mp3_file in files:
print("playing " + mp3_file)
p = subprocess.Popen(["omxplayer","-o","local",music_folder+mp3_file],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE,
stderr = subprocess.PIPE)
print(p)
print(p.poll())
print(p.pid)
p.wait()
p = Process(target = music_player)
print(p, p.is_alive())
p.start()
print(p.pid)
print(p, p.is_alive())
command = raw_input()
if(command == "stop"):
print("terminating...")
p.terminate()
print(p, p.is_alive())
print(p.exitcode)
輸入“停止”命令后,代碼退出,但音樂仍在運行,並且在執行ps
我看到omxplayer的2個進程,然后必須通過kill <pid>
手動將其停止,以使音樂停止。
我以前嘗試使用子進程庫,並使用kill() and terminate()
進程kill() and terminate()
但是發生了相同的問題。
首先觀察,您不需要在這里執行多處理模塊。 子流程用於創建和管理將運行其他腳本和程序的流程; 多重處理用於創建和管理將調用您(父)腳本內部的代碼的進程。
我懷疑您看到緩沖的效果。 在您終止此過程時,它已經將大量音樂緩沖到硬件(甚至設備的OS緩沖區)中。
如果從外殼啟動同一程序omxplayer ,但在后台啟動(會在Unix Shell命令行末尾以&標記將程序推入后台),會發生什么情況。 然后在該進程上使用kill命令,看看是否看到相同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.