簡體   English   中英

從 python 框架向 sudoed C 子進程發送 Ctrl+C SIGINT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM