Я напечатал help suspend
и получил это краткое объяснение:
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
Насколько я понимаю, это: я suspend
печатаю, и терминал зависает, даже strg + c не может разморозить его. Но когда я открываю другой терминал и ищу PID для kill -SIGCONT PID-NR
замороженного терминала и набираю сигнал SIGCONT, он отправляется на замороженный терминал и оттаивает его, так что он размораживается.
Но какова реальная цель приостановки терминала? Какие ежедневные приложения характерны для него? Что имели в виду люди, которые сделали его встроенной оболочкой?
bash
signals
suspend
shell-builtin
sharkant
источник
источник
Ответы:
Если вы запускаете оболочку из другой оболочки, вы можете приостановить внутреннюю. Скажите, когда используете
su
, и хотите на мгновение вернуться к обычному пользователю:(Если вы сделаете это, не забудьте открыть привилегированную оболочку в фоновом режиме ...)
Точно так же, если вы выйдете в оболочку из какой-либо другой программы (
!
напримерless
, из команды ), вы все равно можете приостановить ее. Но я бы не ожидал, что многие другие программы справятся с этим, когда они запустят подпроцесс, который затем приостанавливается.источник
vim
, и сделал,:sh
чтобы получить subshell (в частности,zsh
subshell). Запускsuspend
запихнул меня в оригинальную оболочку (она приостановила как subshell, так и vim).zsh
кажется умнее, чемbash
, я пытался сбежать от обоихless
иvi
(от Debianvim.tiny
):zsh
остановил родительское приложение,bash
повесил все это.bash
кbash
работам , хотя.Это эквивалентно нажатию Ctrl+Zв других командах.
Он приостанавливает оболочку и возвращает управление родительской оболочке или процессу, если таковые имеются.
Пример:
Эта функция появилась в csh, оболочке BSD (откуда происходит управление заданиями) в начале 80-х годов .
В AT & T
ksh
это встроенный псевдоним дляkill -s STOP $$
( да, без кавычек! )В вашем случае это
bash
был, вероятно, тот, который был запущен непосредственно эмулятором терминала. И ваш эмулятор терминала не ожидал, что процесс будет приостановлен.Это
bash
был лидер сессии. Если лидер сеанса приостановлен, если мы возьмем представление о старых временных терминалах, у пользователя не будет возможности возобновить его.bash
адреса, отказываясь,suspend
если это оболочка входа в систему. Но в вашем случае ваш эмулятор терминала, вероятно, не запускаетсяbash
в режиме входа в систему, так что защита не на месте.zsh
иmksh
не имеют проблемы, потому что они посылаютSIGTSTP
(тот, который также был отправлен Ctrl+Z) сигнал, такой как csh вместоSIGSTOP
(и в группу процессов вызывающей стороны дляmksh
как в csh, и в главную группу процессов оболочки дляzsh
, а не сам$$
процесс ).SIGTSTP
игнорируется при доставке в осиротевшую группу процессов, а группа лидера квалифицируется. Идея состоит в том, что SIGTSTP не должен приостанавливать то, что не может быть возобновлено пользователем.В
mksh
илиyash
, также можно использоватьsuspend
для приостановки подоболочки:Это не сработает
zsh
, так как SIGTSTP отправляется основной группе процессов, а не вызывающей стороне. В любой оболочке, которая имеетkill
встроенную функцию, всегда можно использоватьkill -s TSTP 0
вместо нее .источник
command .... &
но вы забыл&
и теперь хотел бы добавить его, не прерывая команду): вы можете:,ctrl-z
а затем введите:,bg
чтобы возобновить последнюю приостановленную задачу в фоновом режиме. (илиbg %n
сделать это с помощью номера задачиn
. Используйтеjobs
для получения списка приостановленных или запущенных задач)suspend
команда .