Por que executar um comando de shell do Linux com '&'?
Para recuperar seu prompt imediatamente e executar o processo em segundo plano.
Qual é a função deles?
nohup permite que o processo em segundo plano continue em execução mesmo depois que o usuário efetua logout (ou sai do shell inicial).
> & redireciona a saída padrão e o erro padrão para o arquivo de log.
& executa a coisa toda em segundo plano, retornando sua solicitação imediatamente.
Explicação:
Todo processo do Linux abre três canais de E / S, uma entrada "stdin", uma saída padrão "stdout" e uma saída de erro padrão "stderr". Eles podem ser usados para binários, mas são tradicionalmente textos. Quando a maioria dos programas vê o stdin fechar, eles saem (isso pode ser alterado pelo programador).
Quando o shell pai sai, stdin é fechado nos filhos e (geralmente, geralmente) os filhos também saem. Além disso, os filhos recebem um sinal de software, SIGHUP, indicando que o usuário "desligou" (anteriormente, o modem) e o padrão aqui é sair também. (Observe, um programador pode alterar tudo isso ao escrever o programa).
Portanto, o que o nohup faz é fornecer ao processo filho um ambiente de E / S separado, vinculando entradas e saídas a algo que não esteja vinculado ao shell pai e protegendo o filho do sinal SIGHUP. Depois que o usuário se desconectar, você verá o processo em segundo plano nohup pertencente ao init (processo 1), não ao shell do usuário.
No entanto, nohupnão é possível executar o trabalho completamente se o processo for executado em primeiro plano, por isso &é usado para executar o programa em segundo plano, onde ele pode continuar sendo executado com ou sem um usuário conectado.