Как мне прервать python скрипт, который работает в фоновом режиме на ma c? - PullRequest
1 голос
/ 11 января 2020

У меня есть python скрипт, который работает в фоновом режиме и работает с watchdog и os. Есть ли способ заставить выйти из такого скрипта? Я уже пытался нажать ctrl + x или ctrl + z, как предлагалось в других обсуждениях, что мне не помогло.

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Если вы отправили свой процесс в фоновый режим с & в конце командной строки, вы можете вернуть его на передний план с помощью fg. Вернувшись на передний план, вы можете убить его с помощью Ctrl+C

test.py:

from time import sleep

n = 0
while True:
    sleep(1)
    n += 1
    print(n)

Пример вывода:

$ python3 -q test.py &
[1] 82675
$ 1
2
3
4
fg
5
6
^CTraceback (most recent call last):
  File "test.py", line 6, in <module>
    sleep(1)
KeyboardInterrupt

Это работает из та же оболочка, где вы начали свой скрипт. Из другой оболочки вы можете найти идентификатор процесса (PID) с помощью ps, а затем убить его с помощью kill -9 <PID>. Кстати, первая выходная строка в приведенном выше примере сообщает вам PID (82675 в данном случае).

Если у вас нет другого процесса, содержащего имя вашего скрипта в командной строке, вы можете даже сделать это (заменив test.py):

$ kill -9 $(ps | fgrep test.py | fgrep -v fgrep | cut -d' ' -f1)
0 голосов
/ 11 января 2020

Если вы запустите команду jobs, вы увидите что-то вроде этого

[1]  + suspended  python .....

Затем вы сможете запустить kill %<job-number> И вы увидите:

[1]  + 43347 killed     vim python ...
...