Digitei help suspend
e recebi esta breve explicação:
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.
Como eu entendo isso é: eu digito suspend
e o terminal congela, nem o strg + c pode descongelar. Mas quando abro outro terminal e procuro o PID para o congelado e digito kill -SIGCONT PID-NR
um sinal SIGCONT, ele é enviado para o terminal congelado e o derrete, para que descongele.
Mas qual é o objetivo real de suspender um terminal? Quais aplicativos todos os dias são típicos para isso? O que as pessoas que fizeram uma concha embutida tinham em mente?
bash
signals
suspend
shell-builtin
tubarão
fonte
fonte
Respostas:
Se você iniciar um shell a partir de outro shell, poderá suspender o interno. Diga ao usar
su
e desejando voltar ao usuário comum por um momento:(Se você fizer isso, não esqueça o shell privilegiado aberto em segundo plano ...)
Da mesma forma, se você escapar para um shell de outro programa (o
!
comando, por exemploless
), ainda poderá suspender o shell. Mas eu não esperaria que muitos outros programas lidassem bem com isso quando lançassem um subprocesso, que então se suspende.fonte
vim
e fiz um:sh
para obter um subshell (especificamente, umzsh
subshell). A corridasuspend
me colocou no shell original (ele suspendeu o subshell e o vim).zsh
parece mais inteligente nisso dobash
que tentei fugir para ambosless
e para ovi
(Debianvim.tiny
):zsh
parei o aplicativo pai também,bash
pendurou a coisa toda.bash
parabash
obras embora.É o equivalente a pressionar Ctrl+Zem outros comandos.
Ele suspende o shell e devolve o controle ao shell ou processo pai, se houver.
Exemplo:
O recurso vem do csh, o shell do BSD (de onde vem o controle de tarefas) no início dos anos 80 .
Na AT&T
ksh
, é um alias interno parakill -s STOP $$
( sim, sem as aspas! )No seu caso,
bash
provavelmente foi o iniciado diretamente pelo emulador de terminal. E o seu emulador de terminal não esperava que o processo fosse suspenso.Esse
bash
foi um líder de sessão. Se o líder da sessão for suspenso, se considerarmos os terminais antigos, o usuário não terá como retomar isso.bash
endereços que, recusandosuspend
se for um shell de login. Mas no seu caso, seu emulador de terminal provavelmente não iniciabash
no modo de logon, de modo que a proteção não está em vigor.zsh
emksh
não tem o problema porque eles enviam um sinalSIGTSTP
(o que também foi enviado Ctrl+Z) como csh, em vez deSIGSTOP
(e para o grupo de processos do chamador,mksh
como no csh, e para o grupo de processos principal do shellzsh
, não apenas o$$
processo )SIGTSTP
é ignorado quando entregue a um grupo de processos órfãos e o grupo do líder é qualificado. A idéia é que o SIGTSTP não suspenda algo que não possa ser retomado por um usuário.Em
mksh
ouyash
, também se pode usarsuspend
para que um subshell se suspenda:Isso não funcionaria com
zsh
o envio do SIGTSTP ao grupo de processos principal em vez do chamador. Em qualquer shell que tenha sidokill
construído, sempre é possível usarkill -s TSTP 0
.fonte
command .... &
mas você esqueceu o&
e agora deseja poder adicioná-lo sem interromper o comando): você pode:ctrl-z
e, em seguida, digite:bg
para retomar a última tarefa suspensa em segundo plano. (oubg %n
de fazer isso com o número de tarefan
Use.jobs
para obter uma lista de tarefas suspensos ou em execução)suspend
comando real .