Killing shell usando terminal

3
echo $$ 

Diz ao PID do shell. Então, se eu matar esse shell usando

kill 123 #suppose 123 is PID of shell

Nada acontece na verdade, eu tentei. Eu novamente corri

echo $$

e o shell estava sendo executado sob o mesmo PID. Por que a casca não está parada? O que pode acontecer se a casca for morta?

    
por luv.preet 08.03.2017 / 19:43

1 resposta

3

A principal razão é porque os shells são construídos para capturar o sinal TERM . Esse comportamento está documentado. Para citar o manual do bash 4.3:

  

SINAIS

     

Quando o bash é interativo, na ausência de quaisquer traps, ele ignora o SIGTERM (para que o kill 0 não mate um          shell interativo), e SIGINT é capturado e manipulado (para que a espera embutida seja interrompível). Em tudo          casos, bash ignora SIGQUIT. Se o controle de trabalho estiver em vigor, o bash ignora o SIGTTIN, o SIGTTOU e o SIGTSTP.

De man kill :

  

O sinal padrão para kill é TERM.

Agora, se você tivesse que especificar kill -KILL $$ , o que realmente mataria o seu shell, e uma vez que o shell de controle saísse - isso fecharia o terminal. As opções -9 , -KILL e -SIGKILL são todos aliases para o mesmo sinal kill , e é por isso que qualquer um desses 3 funciona, e é um dos aliases que Siguza apontou nos comentários.

Contrastando com o que M. Becerra disse, isso não tem nada a ver com a própria janela, já que a janela PID é sempre diferente da da shell:

# Shell PID
$ cat /proc/self/status  | grep '^Pid:'                                                                                  
Pid:    7058
$ echo $$                                                                                                                
14709
# GUI window PID
$ xdotool getactivewindow getwindowpid 
2774
    
por Sergiy Kolodyazhnyy 08.03.2017 / 23:28