Как влияет 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/ для получения дополнительной информации.

alexclooze
источник