Это эквивалентно нажатию Ctrl+Z в других командах.
Он приостанавливает работу оболочки и возвращает управление родительской оболочке или процессу, если таковой имеется.
Пример:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
Функция исходит из csh, оболочки BSD (откуда происходит управление заданиями) в начале 80-х.
В AT&T ksh
это встроенный псевдоним для kill -s STOP $$
(да, без кавычек! )
В вашем случае , bash
, вероятно, был запущен непосредственно эмулятором терминала. И ваш эмулятор терминала не ожидал, что процесс будет приостановлен.
Этот баш
был лидером сессии. Если лидер сеанса приостановлен, если мы возьмем вид старых временных терминалов, у пользователя не будет возможности возобновить его.
bash
устраняет это, отказываясь приостановить
, если это оболочка входа в систему. Но в вашем случае ваш эмулятор терминала, вероятно, не запускает bash
в режиме входа в систему, поэтому защита не работает.
zsh
и mksh
не имеют проблемы, поскольку они отправляют сигнал SIGTSTP
(тот, который также отправляется после Ctrl+Z), например csh вместо SIGSTOP
(и в группу вызывающего процесса для mksh
, как в csh, и в основную группу процессов оболочки для zsh
, а не для $$
только процесс). SIGTSTP
игнорируется при доставке в группу потерянных процессов, и квалифицируется группа лидера. Идея состоит в том, что SIGTSTP не должен приостанавливать то, что не может быть возобновлено пользователем.
В mksh
или yash
можно также использовать suspend
для приостановки подоболочки:
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
+ suspend
[1] + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
$ fg
[1] (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
Это не сработает с zsh
, который отправляет SIGTSTP основной группе процессов, а не вызывающей стороне. В любой оболочке со встроенным kill
всегда можно использовать kill -s TSTP 0
.
Самый гибкий и простой вариант, который я нашел, это AUFS, например. :
mount -t aufs -o "br=CustomFolderToWriteAt:CustomTopOverriderFolder:CustomInBetweenOverriderFolders: CustomLowestPriorityFolder" none CustomMergedMountPointFolder
CustomFolderToWriteAt будет содержать все модификации, которые будут записаны в CustomMergedMountPointFolder, даже если вы коснетесь
файла, он создаст полную копию такого, там.
CustomInBetweenOverriderFolders, здесь их может быть много, разделенных ":".
Изменения в других пользовательских папках мгновенно применяются в объединенной папке CustomMergedMountPointFolder.