Você poderia explicar por que Ctrl + C no meu bash
shell afeta o comando que foi executado anteriormente em segundo plano com:
`./my_script.sh 1` &
O comando imediatamente termina a execução com 130
código:
[1]+ Exit 130 `./my_script.sh 1` &
O comportamento habitual de Ctrl + C é matar o processo de primeiro plano. E o que acontece aqui?
Edit 1: (Meus pensamentos) talvez algo relacionado a backticks - o processo subshell aqui começa e de alguma forma recebe Ctrl + C quando o processo pai recebe
Edit 2: eu achei que Ctrl + C pára todos os processos em segundo plano que foram executados a partir do shell atual com o uso de backticks.
./my_script.sh 1
& amp; . Ou você pergunta sobre o último comando antes do Ctrl-C?`./my_script.sh 1` &
Respostas:
Quando você escreve o comando
você está fazendo um substituição de comando (ver abaixo).
Praticamente você está executando um subcamada (aquele para os backticks
``
) no fundo (&
) em que executa o seu script (./my_script.sh 1
).o concha presente está aguardando o final da execução de sua sub-shell para executar sua saída como comandos.
o subcamada está esperando o final do seu roteiro.
Quando você pressiona Ctrl + C você interrompe essa espera, passando o sinal
SIGINT
para a criança.Neste momento o atual shell tenta executar como comando a saída obtida até agora ... e gera o erro
130
que significa "Script terminado por Control-C" [ 2 ] .Com os backticks
``
, bem como com$()
, na bash você está fazendo um substituição de comando [ 1 ] :por exemplo
Note que se você executar em segundo plano mais desse tipo de comandos
é sempre o shell atual que está aguardando a saída de todos os filhos. Um único Ctrl + C vai acabar com essa espera por todos juntos.
Se, em vez disso, você aguardar o final do script, o shell atual tentará executar sua saída à medida que eles forem concluídos.
fonte
SIGINT
para a criança "o comportamento padrão debash
? Ou somente quando usando substituição de comando?sleep 10; echo ok
como script ...&
... ctrl c ... aproveite seu tempo!