Як вручну зупинити скрипт Python, який постійно працює на Linux


19

У мене є сценарій Python, який працює і постійно скидає помилки у файл журналу.

Я хочу відредагувати сценарій і запустити його знову, але не знаю, як зупинити сценарій.

На даний момент я входжу в Linux через PuTTy і роблю все кодування там. Отже, чи є команда зупинити скрипт python в Linux?

Відповіді:


35

Вам доведеться знайти ідентифікатор процесу (pid). одна команда зробити це було б

$> ps -ef

щоб обмежити результати процесами python, ви можете отримати результат

$> ps -ef | grep python

що дасть такі результати, як:

user      2430     1  0 Jul03 ?        00:00:01 /usr/bin/python -tt /usr/sbin/yum-updatesd

другий стовпчик - під. тоді використовуйте команду kill як таку:

$> kill -9 2430 (i.e. the pid returned)

Це саме те, що я шукав. Дякую

8

Спробуйте цей простий рядок, він припинить усі script.py:

pkill -9 -f script.py

1
Це набагато краще, ніж вручну шукати PID, якщо назва сценарію унікальна.
FlippingBinary

7

Знайдіть ідентифікатор процесу (PID) скрипту і видайте a kill -9 PIDдля вбивства процесу, якщо він не працює як ваш forground процес у терміналі, і в цьому випадку ви можете Contrl-C, щоб його вбити.

Знайдіть PID за допомогою цієї команди:

ps -elf | grep python

У ньому перераховані всі процеси python, виберіть потрібний та відзначте його PID. Потім

kill -9 <whatever_the_PID_is>

вб'є процес. На цьому етапі ви можете отримати повідомлення про припинення процесу.

Крім того, ви можете скористатися topкомандою для пошуку процесу python. Просто введіть k(для вбивства), і topпрограма підкаже вам про PID процесу вбивства. Іноді важко побачити всі процеси, які тебе цікавлять, topоскільки вони можуть прокручуватися з екрана, я думаю, що psпідхід легший / кращий.


4
Добре, перш ніж використовувати -9, я б вбив це "м'яко" спочатку. Тільки якщо він не реагує, я б використовував -9.
glglgl

Не знайомий із терміном "м'якого вбивства" ..
Левон

4

Якщо програма - це поточний процес у вашій оболонці, введення Ctrl-C зупинить програму Python.


Чудове рішення, це було потрібно для тестування.
Кузон

1

У ідеальному світі ви прочитали б документацію до сценарію і побачили, який сигнал (и) слід використовувати, щоб сказати, щоб він закінчився. У реальному житті ви, ймовірно, хочете відправити йому сигнал TERM, спочатку, можливо, використовуючи сигнал KILL, якщо він ігнорує TERM. Отже, те, що ви робите, це знайти ідентифікатор Process, використовуючи команду ps (як хтось уже описав). Потім ви можете бігти kill -TERM <pid>. Деякі програми очищають речі, як-от файли, які вони можуть бути відкритими, коли вони отримують такий сигнал, тому краще починати з чогось подібного. Якщо це не вдається, тобто не так багато залишилося зробити , крім великого молотка: kill -KILL <pid>. (ви можете використовувати числові значення, наприклад -KILL = -9, і вони, ймовірно, ніколи не зміняться, але в теоретичному сенсі може бути безпечніше використовувати імена)


0

Якщо ви знаєте ім'я сценарію, ви можете звести всю роботу до однієї команди:

ps -ef | grep "script_name" | awk '{print $2}' | xargs sudo kill

Якщо ви хочете переконатися, що це сценарій python:

ps -ef | grep "python script_name" | awk '{print $2}' | xargs sudo kill

Якщо ви хочете вбити всі сценарії python:

ps -ef | grep "python" | awk '{print $2}' | xargs sudo kill

Я припускаю, що ви зрозуміли ідею;)

Нагадування: вам потрібно "" цитувати ім'я сценарію, як у прикладах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.