не может убить процесс fbi, запущенный из скрипта python - PullRequest
0 голосов
/ 09 марта 2019

Этот код на python запускает fbi в бесконечном цикле, хотя для ctrl-C

существует ловушка
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, экран мигает, и изображение1 возвращается. Теперь я знаю, что 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, который выполняет обработку изображений на Raspberry Pi, который не работает с x windows, ubuntu и т. Д. Это только консоль.

Почему fbi не уважает прерывание клавиатуры?

1 Ответ

1 голос
/ 09 марта 2019

kill $(pgrep fbi) не является синтаксисом Python, его нельзя вставить непосредственно в скрипт Python.Вам нужно выполнить ее как команду оболочки, как вы делали это при запуске fbi.

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")

Кроме того, если вы запускаете fbi с sudo, вам нужно использовать sudo при убийстве.Обычный пользователь не может уничтожить процесс, запускаемый пользователем root.

Лучше использовать pkill fbi вместо kill $(pgrep fbi).Последний получит ошибку, если pgrep не найдет никаких процессов, потому что он выполнит kill без аргументов.

...