Qual é a função do comando nohup?

18

Eu sou um novato no Ubuntu. Eu aprendi um comando

nohup [command] - execute <command> imune ao sinal de desligamento

Eu não consigo entender o significado de " imune ao sinal de desligamento ". De que tipo de sinal está falando? E por favor me diga como usar este comando com um exemplo.

    
por coding_ninza 12.01.2018 / 14:52

2 respostas

34

Vamos considerar que você abriu um editor de texto gedit de um terminal e está trabalhando nele. Se você fechar o terminal antes de fechar gedit , o gedit também será fechado assim que fechar o terminal. Então, o que está acontecendo aqui? O gedit é executado como um processo filho sob o terminal. Quando você fecha o terminal, um sinal de desligamento ( SIGHUP ) é enviado para o processo que mata o processo filho.

Por outro lado, se você quiser que seu processo filho (aqui gedit ) continue em execução mesmo depois de fechar o terminal pai, você desejaria que seu processo fosse imune ao sinal de desligamento. Então, fechar o terminal não fecha o processo filho. nohup faz exatamente esse trabalho.

nohup não desconecta um comando do terminal , ele faz seu script ignorar SIGHUP e redireciona stdout / stderr para um arquivo nohup.out, para que o comando possa continuar sendo executado em segundo plano após o logout. Se você fechar o shell / terminal ou efetuar logoff, seu comando não será mais um filho desse shell. Pertence ao processo init. Se você pesquisar em pstree , verá que agora pertence ao processo 1 (init). Isso não pode ser trazido de volta ao primeiro plano porque o primeiro plano não existe mais.

    
por souravc 12.01.2018 / 15:11
16

Além do que @sourvac escreveu, este é um legado do Back In The Day em que as pessoas faziam login via terminais burros somente de texto, muitas vezes através do modem (original, analógico 110 baud): o "desligamento" é literalmente "suspenso" o telefone ".

Um pid que esteja imune ao sinal de desligamento continuará funcionando mesmo depois que você sair e desligar o telefone . Isso era muito útil em computadores lentos quando as tarefas eram executadas por horas e horas, e você não podia simplesmente ficar logado (alguém precisava usar o terminal, você precisava usar o telefone, estático no linha pode "bzzt" a conexão, etc).

    
por RonJohn 12.01.2018 / 16:14