nohup
comando executa outro programa especificado como argumento e ignora todos os SIGHUP
(hangup) sinais. SIGHUP
é um sinal que é enviado para um processo quando seu terminal de controle é fechado.
geralmente, quando você executa um programa sobre SSH, se a sua ligação cair ou você sair, a sessão é terminada, e todos os processos executados a partir do terminal irá parar. É aqui que o comando nohup
vem a calhar., Ignora todos os sinais de desligamento, e o processo continuará a correr.
Como Usar o Comando nohup #
A sintaxe para o nohup
comando é da seguinte maneira:
nohup COMMAND
O comando não aceita quaisquer outras opções, exceto o padrão --help
e --version
.,
Vamos dar uma olhada no exemplo a seguir:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
executa o mycommand
comando em primeiro plano e redireciona a saída do comando para o nohup.out
arquivo. Este ficheiro é criado na pasta de trabalho actual . Se o utilizador que executa o comando não tiver permissões de escrita na pasta de trabalho, o ficheiro é criado na pasta pessoal do utilizador.
Se você sair ou fechar o terminal, o processo não é terminado.,
executar o comando em segundo plano #
Usando nohup
em primeiro plano não é muito útil porque você não será capaz de interagir com a shell até que o comando termine.
Para executar o comando em segundo plano , acrescente o &
símbolo no final do comando:
nohup mycommand &
a saída inclui O shell de IDENTIFICAÇÃO do trabalho (cercado com parênteses) e o ID do processo:
25177
Você pode usar o ID de trabalho para trazer o comando para o primeiro plano usando o fg
comando.,
Se, por algum motivo, você quer terminar o processo, use o kill
comando seguido do ID de processo:
kill -9 25132
Redirecionando a Saída para um Arquivo #
Por padrão, nohup
redireciona a saída do comando para o nohup.out
arquivo. Se você quiser redirecionar o resultado para um arquivo diferente, use o redirecionamento padrão da shell.,
Por exemplo, para redirecionar a saída padrão e erro padrão para o mycommand.out
você usaria:
nohup mycommand > mycommand.out 2>&1 &
Para redirecionar a saída padrão e erro padrão para arquivos diferentes:
nohup mycommand > mycommand.out 2> mycommand.err &
Alternativas #
Existem várias alternativas de programas que você pode usar para evitar um comando para ser finalizado quando você fechar o terminal ou desconectado.,
Screen #
Screen ou GNU Screen é um programa multiplexador de terminal que lhe permite iniciar uma sessão de ecrã e abrir qualquer número de janelas (terminais virtuais) dentro dessa sessão. Os processos em execução no ecrã continuarão a correr quando a sua janela não estiver visível, mesmo que seja desligado.
Tmux #
Tmux é uma alternativa moderna à tela GNU. Com o Tmux, você também pode criar uma sessão e abrir várias janelas dentro dessa sessão. As sessões de Tmux são persistentes, o que significa que os programas em execução no Tmux continuarão a ser executados mesmo que você feche o terminal.,
Deserda #
disown
é uma construção de shell que remove uma tarefa shell do controle de trabalho da shell. Ao contrário de nohup
, você pode usar disown
em processos em execução também.
conclusão #
nohup
permite-lhe evitar que os comandos sejam terminados quando sai ou sai do terminal.