Как влияет CTRL + Z на приложение unix \ Linux


86

Мне было любопытно и смущено, что именно такое поведение CTRl + Z.

Я знаю, если процесс выполняется на переднем плане, и мы нажимаем Ctrl + Z, он переходит в фоновый режим.

Но что именно происходит.

Продолжает ли он выполнять свою работу, или он приостанавливается и останавливается в том месте, где он был.

И если это остановится в этот момент, и в чем смысл фоновой работы.


7
Ctrl-Z не отправляет процесс в фоновый режим, он приостанавливает его.
Wooble

Ответы:


71

«Фоновая работа» - это просто та, которая не взаимодействует с пользователем - она ​​не контролирует tty и просто делает свое дело (обычно молча). Задание на переднем плане является обратным, оно контролирует tty для взаимодействия с пользователем.

Control-Z приостанавливает самый последний процесс переднего плана (последний процесс, который взаимодействует с tty) (если только этот процесс не принимает меры для игнорирования приостановки, как это обычно делают оболочки). Как правило, это возвращает вас к вашей оболочке, из которой вы обычно можете ввести команду, bgчтобы переместить только что приостановленный процесс в фоновый режим (чтобы он продолжал выполняться) или fgвернуть его на передний план.


1
отменить фоновый процесс, fgсначала определив, какое задание, выполнив, jobs затем скажите, если его% 1, то выпуск fb %1 и процесс будут возобновлены
Скотт Стенсланд,

fg %1нетfb %1
ахоннеке

55

Нажатие Ctrl + Z отправляет TSTPсигнал вашему процессу. Это останавливает выполнение (ядро не будет планировать больше процессорного времени для процесса), и процесс ожидает CONT для продолжения обработки.

Вы можете эмулировать / реплицировать это через kill -TSTPи kill -CONT(поскольку killотправит назначенный сигнал вашему процессу, несмотря на название!)

Оболочка имеет функциональность для «фонового» процесса, но это отношения между оболочкой и процессом. Сам процесс на самом деле не имеет понятия «фон» или «передний план».

Смотрите здесь для получения дополнительной информации.


2
^Zотправляет SIGTSTP, а не SIGSTOP
Уильям Перселл

@WilliamPursell - ах! Отметил. Сейчас поменял. Thx
Брайан Агнью

15

Рассмотрим эту команду, которая занимает ок. 4,5 секунды на моем ноутбуке:

echo 2^10000000 | bc -lq | wc -c

Когда вы нажмете Ctrl+ Z, расчет будет приостановлен. У вас есть возможность возобновить расчет fgв фоновом режиме, или возобновить его в фоновом режиме, используя bg. Последнее более или менее эквивалентно выполнению:

echo 2^10000000 | bc -lq | wc -c &

9

Процесс приостанавливается и останавливается при нажатии Ctrl + Z. С помощью fg вы можете переместить приостановленную работу на передний план, с помощью bg вы можете запустить ее в фоновом режиме.

Смотрите http://linuxreviews.org/beginner/jobs/ для получения дополнительной информации.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.