Guest User

Untitled

a guest
Jul 17th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. Vamos primeiro ver o que acontece se um programa é iniciado a partir de um shell interativo (conectado a um terminal) sem & (e sem qualquer redirecionamento). Então vamos supor que você acabou de digitar foo:
  2.  
  3. O processo executando foo é criado.
  4. O processo herda stdin, stdout e stderr do shell. Portanto, ele também está conectado ao mesmo terminal.
  5. Se o shell receber um SIGHUP, ele também enviará um SIGHUP ao processo (o que normalmente faz com que o processo termine).
  6. Caso contrário, o shell aguarda (está bloqueado) até que o processo termine.
  7. Agora, vamos ver o que acontece se você colocar o processo em segundo plano, isto é, digitar foo &:
  8.  
  9. O processo executando foo é criado.
  10. O processo herda stdout / stderr do shell (portanto, ele ainda grava no terminal).
  11. O processo, em princípio, também herda stdin, mas assim que ele tenta ler de stdin, ele é interrompido.
  12. Ele é colocado na lista de tarefas em segundo plano que o shell gerencia, o que significa especialmente:
  13. Ele é listado com trabalhos e pode ser acessado usando% n (onde n é o número do trabalho).
  14. Ele pode ser transformado em um trabalho em primeiro plano usando fg, nesse caso, continua como se você não tivesse usado & nele (e se ele foi parado devido a tentar ler a partir da entrada padrão, agora pode continuar a ler a partir do terminal ).
  15. Se o shell recebeu um SIGHUP, ele também envia um SIGHUP para o processo. Dependendo do shell e possivelmente das opções definidas para o shell, ao finalizar o shell, ele também enviará um SIGHUP ao processo.
  16. Agora disown remove o job da lista de jobs do shell, então todos os subpontos acima não se aplicam mais (incluindo o processo que está sendo enviado um SIGHUP pelo shell). No entanto, observe que ele ainda está conectado ao terminal, portanto, se o terminal for destruído (o que pode acontecer se for um pty, como aqueles criados pelo xterm ou ssh, e o programa de controle for finalizado, fechando o xterm ou encerrando o SSH conexão), o programa falhará assim que tentar ler a entrada padrão ou gravar na saída padrão.
  17.  
  18. O que o nohup faz, por outro lado, é separar efetivamente o processo do terminal:
  19.  
  20. Fecha a entrada padrão (o programa não será capaz de ler qualquer entrada, mesmo que seja executado em primeiro plano. Ele não será interrompido, mas receberá um código de erro ou EOF).
  21. Ele redireciona a saída padrão e o erro padrão para o arquivo nohup.out, portanto, o programa não falhará para gravar na saída padrão se o terminal falhar, portanto, o que quer que o processo grava, não será perdido.
  22. Isso impede que o processo receba um SIGHUP (assim, o nome).
  23. Note que o nohup não remove o processo do controle do job do shell e também não o coloca em segundo plano (mas como um job nohup de primeiro plano é mais ou menos inútil, você geralmente o coloca em segundo plano usando &). Por exemplo, ao contrário do disown, o shell ainda lhe dirá quando a tarefa nohup foi concluída (a menos que o shell seja finalizado antes, é claro).
  24.  
  25. Então, para resumir:
  26.  
  27. & coloca o trabalho em segundo plano, isto é, bloqueia a tentativa de ler a entrada e faz com que o shell não espere pela sua conclusão.
  28. disown remove o processo do controle de tarefa do shell, mas ainda o deixa conectado ao terminal. Um dos resultados é que o shell não envia um SIGHUP. Obviamente, ele só pode ser aplicado a tarefas em segundo plano, porque você não pode inseri-lo quando um trabalho em primeiro plano está em execução.
  29. o nohup desconecta o processo do terminal, redireciona sua saída para nohup.out e protege-o do SIGHUP. Um dos efeitos (o nome) é que o processo não receberá nenhum SIGHUP enviado. É completamente independente do controle do trabalho e pode, em princípio, ser usado também para trabalhos em primeiro plano (embora isso não seja muito útil).
Add Comment
Please, Sign In to add comment