Sou administrador de sistema e fui solicitado a executar um script Linux para limpar o sistema.
O comando é este:
perl script.pl > output.log &
então, este comando está terminando com um &
sinal, há algum significado especial para isso?
Tenho conhecimento básico de shell, mas nunca tinha visto isso antes.
&
e&&
:&
executa o primeiro comando em segundo plano;&&
executa o primeiro comando e segue condicionalmente para o segundo se sair com sucesso.Respostas:
Isso
&
faz com que o comando seja executado em segundo plano.De
man bash
:fonte
Além disso, você pode usar o sinal "&" para executar vários processos por meio de uma (1) conexão ssh para manter o número mínimo de terminais. Por exemplo, eu tenho um processo que escuta mensagens para extrair arquivos, o segundo processo escuta mensagens para fazer upload de arquivos: Usando o "&", posso executar os dois serviços em um terminal, por meio de uma única conexão ssh com meu servidor .
***** Acabei de perceber que esses processos executados por meio de "&" também "permanecerão vivos" após o encerramento da sessão ssh! muito legal e útil se sua conexão com o servidor for interrompida **
fonte
nohup
irá manter os processos vivos também.Quando não informado de outra forma, os comandos assumem o primeiro plano. Você só tem um processo de "primeiro plano" em execução em uma única sessão de shell. O símbolo & instrui os comandos a serem executados em um processo em segundo plano e retorna imediatamente à linha de comando para comandos adicionais.
Um processo em segundo plano não permanecerá ativo após o encerramento da sessão do shell. SIGHUP termina todos os processos em execução. De qualquer maneira, por padrão. Se o seu comando é de longa duração ou indefinidamente (ou seja: microsserviço), você precisa prendê-lo com nohup para que continue em execução após você se desconectar da sessão:
EDITAR: Parece haver uma área cinza em relação ao fechamento de processos em segundo plano quando & é usado. Esteja ciente de que o shell pode fechar seu processo dependendo do seu sistema operacional e das configurações locais (particularmente no CENTOS / RHEL): https://serverfault.com/a/117157 .
fonte
Não sei ao certo, mas estou lendo um livro agora e o que estou entendendo é que um programa precisa controlar seu sinal (como quando eu pressiono
CTRL-C
). Agora, um programa pode usarSIG_IGN
para ignorar todos os sinais ouSIG_DFL
restaurar a ação padrão.Agora, se você fizer
$ command &
isso, este processo em execução como processo em segundo plano simplesmente ignora todos os sinais que ocorrerão. Processos de primeiro plano, esses sinais não são ignorados.fonte