Допустим, вам не хватает 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
и не приостанавливать, если этот сигнал получен слишком рано).
fork/exec