suspend
встроенная команда в Bash Когда бы вы естественным образом использовали эту команду и сочли ее полезной?
12
suspend
встроенная команда в Bash Когда бы вы естественным образом использовали эту команду и сочли ее полезной?
fork/exec
STOP
сигнал), когда она разветвляется на дочерний процесс. Я также немного смущен вашим вторым комментарием.wait()
звучит разумно для меня. Я сказал, что оболочка приостанавливает себя каждый раз, когда она разветвляется на дочерний процесс . Я ничего не говорил о получении сигналов остановки, это не имело бы никакого смысла.Ответы:
Допустим, вам не хватает GNU
screen
иtmux
(и X11, и виртуальных консолей), но вы хотите переключаться между оболочкой входа в систему и другой интерактивной оболочкой.Сначала вы должны войти в консоль, а затем запустить новую оболочку, временно заблокировав оболочку входа. Чтобы вернуть оболочку входа в систему и выполнить там какую-то работу, вам нужно это сделать
suspend
. Затем вы должныfg
вернуть интерактивную оболочку, чтобы продолжить то, что вы там делали.В самом деле, с управлением заданиями, то Войти оболочка может породить ряд интерактивных оболочек в качестве фона рабочих мест , которые вы могли бы перейти на с
fg %1
, иfg %2
т.д., но , чтобы вернуться в оболочку входа, вам нужно будет использовать ,suspend
если вы не хотели вручнуюkill -s STOP $$
.Также обратите внимание, что Ctrl+ Zв приглашении в интерактивной оболочке не приостановит его.
РЕДАКТИРОВАТЬ: у меня изначально был длинный гипотетический раздел об использовании
suspend
в сценарии, но так как команда требует управления заданиями и поскольку неинтерактивные оболочки обычно не имеют управления заданиями, я удалил этот раздел.Удаленный раздел с
suspend
заменой наkill -s STOP $$
(это действительно больше не относится к ответу, но в любом случае это может быть интересно другим):Предположим, у вас есть фоновый процесс (скрипт) в скрипте, и что этот фоновый процесс на каком-то этапе должен остановиться и дождаться, пока родительский процесс скажет, что он продолжится. Это может быть так, чтобы у родителя было время извлечь и переместить файлы на место или что-то в этом роде.
Дочерний скрипт будет приостановлен (
kill -s STOP $$
), а родительский скрипт отправит емуCONT
сигнал, когда все будет в порядке, чтобы продолжить.Это дает вам возможность реализовать своего рода синхронизацию между родительским процессом и дочерним процессом (хотя он очень прост, поскольку родительский процесс оболочки более или менее должен догадаться, что дочерний процесс приостановлен, хотя это можно исправить с помощью дочернего процесса. перехватывать
CONT
и не приостанавливать, если этот сигнал получен слишком рано).источник