无法杀死从python脚本启动的fbi进程

时间:2019-03-08 22:09:34

标签: python raspberry-pi fbi

即使存在ctrl-C陷阱,此python代码也会在无限循环中运行fbi

import os
var = 1
try:
    while var == 1:
        os.system("sleep 5; kill $(pgrep fbi); sudo fbi -a image1.jpg")
except KeyboardInterrupt:
    kill $(pgrep fbi)
    pass

我按ctrl-C,屏幕闪烁,并且image1已备份。 现在我知道python的行为正常,因为此代码以ctrl-C退出

import os
var = 1
x = 0
try:
    while var == 1:
        x += 1
        print x
except KeyboardInterrupt:
    pass

当我使用alt-F2打开另一个虚拟控制台时,登录并尝试

sudo kill -9 fbi

当然,python进程只是重新启动它。我必须杀死python进程。这样做的原因是使用fbi在python进程中显示图像,该python进程在未运行x Windows,ubuntu等的树莓派上进行图像处理。它仅是控制台。

为什么fbi不尊重键盘中断?

1 个答案:

答案 0 :(得分:1)

kill $(pgrep fbi)不是Python语法,您不能将其直接放入Python脚本中。您需要像执行fbi时一样将其作为shell命令执行。

import os
var = 1
try:
    while var == 1:
        os.system("sleep 5; sudo pkill fbi; sudo fbi -a image1.jpg")
except KeyboardInterrupt:
    os.system("sudo pkill fbi")

此外,如果您将fbisudo一起运行,则在杀死它时也需要使用sudo。普通用户无法终止由root用户运行的进程。

最好使用pkill fbi而不是kill $(pgrep fbi)。如果pgrep找不到任何进程,则后者将出错,因为它将执行kill而没有任何参数。