Alguma confusão sobre nohup

0

Situation1

comando

  1. find / -name "*.conf"
  2. Ctrl + Z para pausar o processo

Situation2

--- hello.sh ---

#!/bin/bash
/bin/sleep 5000

Comando

de ./hello.sh &

Situation3

Comando

de nohup ./hello.sh &

finalmente
comando

pstree | less para obter as informações dos processos

|-sshd-+-sshd
|      |-sshd---bash
|      '-sshd---bash-+-find
|                    |-2*[hello.sh---sleep]
|                    |-less
|                    '-pstree

depois, saio do ssh

Eu obtenho as informações do pstree em outro ssh

init-|      
     |-2*[hello.sh---sleep]  

pergunta

  1. Por que eu executo hello.sh e uso nohup para suspender hello.sh , o resultado será o mesmo?
  2. Por que o processo find não aparece como o processo hello.sh ? Quando o processo pai foi morto, init process possuirá o processo órfão.
  3. É necessário usar nohup se eu quiser um processo em segundo plano?
por Sung Qee 17.03.2016 / 12:18

1 resposta

0

Eu não entendo completamente sua pergunta, mas vou tentar explicar o uso de nohup :

Na página de manual man nohup :

nohup - run a command immune to hangups, with output to a non-tty

Portanto, nohup desconecta os fluxos de entrada e saída padrão do terminal ( /dev/null se torna entrada, a saída vai para o arquivo nohup.out ) e também protege o aplicativo dos sinais SIGHUP (sinal de desligamento). Isso permite que você finalize o processo do shell no qual iniciou o comando nohup -ed sem eliminar este processo filho.

Uma maneira semelhante de impedir a eliminação de um processo quando o shell pai é finalizado é disown :

my_command & disown

Isso executa my_command em segundo plano e o desativa do processo pai, mas sem executar nenhum redirecionamento de E / S. Ele efetivamente torna o comando um processo independente, não sendo mais um processo filho do shell pai.

Quando você quer apenas executar um processo em segundo plano, mas não quer deserdá-lo do shell atual (para que ele seja eliminado quando o processo pai sair), você pode omitir o nohup ou disown e use somente & do Bash:

my_command &
    
por Byte Commander 17.03.2016 / 12:33