Як зупинити / припинити запуск сценарію python?


104

Я написав програму в IDLE для токенізації текстових файлів, і вона починає токенізувати 349 текстових файлів! Як я можу це зупинити? Як я можу зупинити запущену програму Python?


5
ctrl+cповинен його вбити. Як варіант, kill -9це
xbonez

1
Багато відповідей тут залежать від платформи. Шукайте свою платформу (Windows, Linux, Mac, щось інше?)
tripleee

Відповіді:


60

Щоб зупинити програму, просто натисніть Control + C.


23
Цей метод працював на моєму ноутбуці з Windows, але на моєму робочому столі Linux це показало ^Cв терміналі, а системний монітор показав, що python все ще використовує багато процесора ...
user3768495

Чи можна відновити роботу сценарію після його зупинки?
Gathide

9
@Gathide Якщо ви хочете призупинити процес і перевести його у фоновий режим, натисніть Ctrl + Z(принаймні в Linux). Потім, якщо ви хочете його вбити, запустіть, kill %nде "n" - це число, яке ви отримали поруч із "Зупинено" при натисканні Ctrl + Z. Якщо ви хочете відновити його, запустіть fg.
cluxter

Не працює, якщо у вас є загальне застереження за винятком: у програмі. За винятком: ловить переривання, робить щось (або ні), а потім програма весело продовжує.
DragonLord

116

Ви також можете це зробити, якщо використовуєте exit()функцію у своєму коді. В ідеалі ви можете це зробити sys.exit(). sys.exit()що може завершити роботу Python, навіть якщо ви паралельно запускаєте речі через multiprocessingпакет.

Примітка: Для того, щоб використовувати sys.exit(), ви повинні імпортувати його:import sys


8
Примітка. Я міг знайти приклади, в яких sys.exit(1)процес не зупиняється. В основному у мене кілька потоків, і кожен з них блокує зовнішні процеси, запущені Popen. Мені потрібен ядерний варіант, щоб знищити всі підпроцеси, створені процесом Python, а також сам процес Python. Не знайшов поки.
Дічі

sys.exit () не вбиває процес, але викликає виняток SystemExit, який не зупиняє виконання, закривши програму
c24b

37

Якщо ваша програма працює на інтерактивній консолі, натискання CTRL+ Cвикликає KeyboardInterruptвиняток у основному потоці.

Якщо ваша програма Python його не вловлює, це KeyboardInterruptпризведе до виходу Python. Однак except KeyboardInterrupt:блок, або щось на зразок голого except:, буде заважати цьому механізму фактично зупиняти запуск сценарію.

Іноді, якщо KeyboardInterruptне працює, SIGBREAKзамість цього можна надіслати сигнал; у Windows, CTRL+ Pause/Breakможе оброблятися інтерпретатором без генерування вловлюваного KeyboardInterruptвинятку.

Однак ці механізми в основному працюють, лише якщо інтерпретатор Python працює і реагує на події операційної системи. Якщо інтерпретатор Python не реагує з якихось причин, найефективнішим способом є припинення всього процесу операційної системи, на якому запущений інтерпретатор. Механізм цього залежить від операційної системи.

У середовищі оболонки в стилі Unix ви можете натиснути CTRL+, Zщоб призупинити будь-який процес, який зараз контролює консоль. Після того, як ви отримаєте підказку оболонки назад, ви можете використовувати jobsдля переліку припинених завдань, і ви можете вбити перше призупинене завдання за допомогою kill %1. (Якщо ви хочете знову запустити його, ви можете продовжити роботу на передньому плані, використовуючи fg %1; для отримання додаткової інформації прочитайте посібник вашої оболонки з управління завданнями.)

Крім того, в Unix або Unix-подібному середовищі ви можете знайти PID процесу Python (ідентифікатор процесу) і вбити його за допомогою PID. Використовуйте щось на зразок, ps aux | grep pythonщоб знайти, які процеси Python запущені, а потім використовуйте kill <pid>для надсилання SIGTERMсигналу.

killКоманда на Unix відправляє SIGTERMза замовчуванням, і програма Python може встановити обробник сигналу для SIGTERMвикористання signalмодуля. Теоретично, будь-який обробник сигналу SIGTERMповинен витончено вимкнути процес. Але іноді, якщо процес застряг (наприклад, заблокований у режимі безперебійного вводу-виводу), SIGTERMсигнал не має ефекту, оскільки процес навіть не може прокинутися, щоб його обробити.

Щоб примусово вбити процес, який не реагує на сигнали, вам потрібно надіслати SIGKILLсигнал, який іноді називають так, kill -9оскільки 9це числове значення SIGKILLконстанти. За допомогою командного рядка ви можете скористатися kill -KILL <pid>(або kill -9 <pid>коротше) для надсилання SIGKILLта негайного зупинення запущеного процесу.

У Windows у вас немає системи процесорних сигналів Unix, але ви можете примусово припинити запущений процес, використовуючи TerminateProcessфункцію. Інтерактивно найпростіший спосіб зробити це - відкрити диспетчер завдань, знайти python.exeпроцес, який відповідає вашій програмі, і натиснути кнопку «Завершити процес». Ви також можете використовувати taskkillкоманду для подібних цілей.


31
  • Щоб зупинити скрипт python, просто натисніть Ctrl + C.
  • Усередині сценарію за допомогою exit()ви можете це зробити.
  • Ви можете зробити це в інтерактивному скрипті, лише вийшовши.
  • Можна використовувати pkill -f name-of-the-python-script.

Останній варіант особливо корисний, коли сценарій запускається у python script.py&
відключеному

26

Ctrl-Break це потужніше, ніж Ctrl-C


4
Як уточнює у своїй відповіді Даніель Прайден, клавіша Break на клавіатурі також може бути позначена як Pause для тих, хто був у розгубленості, як я. :)
JakeStrang

25

Щоб зупинити запущену програму, натисніть Ctrl+, Cщоб завершити процес.

Щоб обробляти це програмно на python, імпортуйте sysмодуль і використовуйте sys.exit()там, де ви хочете завершити програму.

import sys
sys.exit()

17

Щоб зупинити скрипт python за допомогою клавіатури: Ctrl+C

Щоб зупинити його за допомогою коду (це працювало у мене на Python 3):

import os
os._exit(0)

Ви також можете використовувати:

import sys
sys.exit()

або:

exit()

або:

raise SystemExit

4

Ctrl + Z повинен це зробити, якщо ви потрапили в оболонку python. Майте на увазі, що екземпляри сценарію можуть продовжувати працювати у фоновому режимі, тому під Linux вам потрібно вбити відповідний процес.


це корисно при запуску (багатьох) паралельних процесів, і CTRL-C просто не вб'є їх усіх. Після CTRL-Z ви можете перевірити, jobsабо psтоді, kill 8923754або будь-який ідентифікатор вакансії / процесу, який вам потрібно вбити
Пол

3

Коли у мене є скрипт python, який працює на терміналі Linux, працює CTRL + \. (не CRTL + C або D)



3

exit () вб'є ядро, якщо ви знаходитесь у блокноті Jupyter, тож це не гарна ідея. raiseкоманда зупинить програму.


2

Ви також можете використовувати, Activity Monitorщоб зупинити процес py



0

Натисніть Ctrl+ Alt+, Deleteі з'явиться диспетчер завдань. Знайдіть запущену команду Python, клацніть на ній правою кнопкою миші та натисніть Зупинити або Вбити.


0

Якщо ви працюєте з Spyder, використовуйте CTRL +. (DOT), і ви перезапустите ядро, а також зупините програму.


0

Рішення для Windows: Control + C.

Рішення для Macbook: Control (^) +C .

Інший спосіб - це відкрити термінал, набрати top, записатиPID процес, який ви хочете вбити, а потім набрати на терміналі:kill -9 <pid>

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