В чем разница между ^ S и ^ Z внутри терминала?

3364
Eugene Yarmash

При использовании эмулятора терминала можно остановить текущую программу нажатием CTRL-Zлибо CTRL-S. В чем разница между этими управляющими персонажами?

6
http://superuser.com/questions/243460/what-to-do-when-ctrl-c-cant-kill-a-process/243472#243472 akira 13 лет назад 0

2 ответа на вопрос

4
Phil

It's the difference between the "stop" and "suspend" actions to the terminal.

Stopping the output with Ctrl-S doesn't stop the process from running; rather it just stops output to the terminal (resume with Ctrl-Q / "start").

Suspending a process with Ctrl-Z actually stops it running, and puts the process into a different state visible from ps (state "T"). Resume with "fg" or "bg" to resume the process in the foreground or background, respectively.

«скорее, он просто останавливает вывод на терминал» - это обычно приостанавливает приложение как побочный эффект Eugene Yarmash 13 лет назад 0
Если приложение попытается выполнить чтение / запись в терминал, оно будет приостановлено, да. Если нет, приложение продолжает работать. Это одно из существенных различий между двумя методами. Phil 13 лет назад 0
Sidenote: многие оболочки поддерживают [Ctrl-Y для фонового процесса, и приостанавливают работу только при первом запросе на ввод с терминала. Это называется _delayed suspend] (http://www.gnu.org/software/bash/manual/bashref.html#Job-Control-Basics) _ sehe 13 лет назад 0
... или, точнее, "блоки". minmaxavg 8 лет назад 0
3
cularis

CTRL-Z sends the SIGSTOP signal, which forces the program to stop.

With

fg 

or

bg 

you can send SIGCONT and start it in the front- or background.

CTRL-S just stops outputting stuff to the terminal. (XOFF) You can turn it back on with CTRL-Q.(XON)

Небольшое исправление: Control-Z отправляет SIGTSTP, а не SIGSTOP. Важное различие между ними заключается в том, что программы могут перехватывать или игнорировать SIGTSTP, но не SIGSTOP. Программы могут перехватить TSTP и выполнить операции очистки перед приостановкой выполнения, но STOP вызывает остановку процесса без какого-либо уведомления. Chris Page 13 лет назад 0