Остановить python в терминале на mac
Используя python в терминале на Mac, введите
ctrl-z
остановит python, но не выйдет из него, выдав такой вывод:
>>>
[34]+ Stopped python
Как вы можете видеть, я остановил 34 вызова python.
Хотя я мог бы использовать
>>> exit()
для выхода из python, вопросы:
-
Есть ли короткий ключ, чтобы действительно выйти (не просто остановить) python в терминале? и, почему
ctrl-c
НЕ работает?
-
Как убить всех остановленных python?
Кстати, как я мог набирать "ctrl-c" и другие горячие клавиши с клавиатурой?
Спасибо!
Ответы
Ответ 1
CTRL + d → Определяет EOF (конец файла).
CTRL + c → Прервет большинство заданий.
Если, однако, вы написали программу-оболочку python, которая в свою очередь вызывает другие программы-питоны, Ctrl-c остановит только то, что выполняется в настоящее время. Программа-обертка будет работать. В худшем случае вы можете сделать это:
Откройте: Приложения → Утилиты → Монитор активности, найдите процесс, обозначенный как python, выделите его в мониторе активности и нажмите "Завершить процесс".
Эти три предложения должны работать в большинстве ситуаций, когда вы хотите остановить программу.
Ответ 2
Это не проблема Python, как таковая. Это поведение оболочки Unix и отличается от Windows и других систем. См. статью Википедии о CTRL-Z для более полного объяснения:
В Unix-подобных системах Control + Z является наиболее распространенной клавиатурой по умолчанию отображение последовательности ключей, которая приостанавливает процесс (SIGTSTP). При вводе пользователем на своем компьютерном терминале в настоящее время для запуска процесса переднего плана отправляется сигнал SIGTSTP, который обычно заставляет процесс приостановить его выполнение. Пользователь может позже продолжите выполнение процесса, набрав команду 'fg' (сокращение для переднем плане) или набрав 'bg' (сокращение от фона) и, кроме того, набрав команду "disown", чтобы отделить фоновый процесс от терминал.
В OS X, как и в других системах на базе Unix, вы можете использовать команду stty
, чтобы изменить, какой ключ, если таковой имеется, создает SIGTSTP
(или eof
, если на то пошло):
$ stty -a
speed 38400 baud; 30 rows; 90 columns;
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
$ stty susp ^Y
$ cat
^Y
[1]+ Stopped cat