[英]Sending a Ctrl+C SIGINT to sudoed C subprocess from python framework
我正在運行 python 子進程,使用:
p = Popen(["sudo", "./a.out"])
其中a.out
是一個 C 可執行文件,它連續運行,直到向其發送 SIGINT 或 Ctrl+C 信號。 我在使用subprocess.Popen
object 函數(例如send_signal()
時遇到了問題,因為由於可執行文件的sudo
特性而引發了Operation not permitted
allowed 錯誤。 在此之后,我嘗試通過以下方式向子進程發送 SIGINT:
os.system(f"sudo kill -2 {p.pid}")
但這似乎並沒有正確地針對該過程。 運行快速sudo netstat -lpnt
檢查顯示a.out
進程仍在運行在與p.pid
返回的 pid 不同的 pid 上(通常是幾個整數,即p.pid
返回 3031 但a.out
是 3035 )。 我有什么誤解嗎?
您實際上正在獲取pid並殺死 sudo 進程(它分叉了您的應用程序進程)。 相反,您應該使用以下命令殺死整個進程組:
import subprocess, os
p = Popen(["sudo", "./a.out"])
pgid = os.getpgid(p.pid)
subprocess.check_output("sudo kill {}".format(pgid))
或在pkill的幫助下:
import subprocess
p = Popen(["sudo", "./a.out"])
subprocess.call(f"sudo pkill -2 -P {p.pid})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.