O que significa “&” no final de um comando linux?

94

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.

Cara
fonte
desculpe meu mal, eu sabia sobre essas coisas básicas
Cara
2
Se você está nesta página procurando a diferença entre &e &&: &executa o primeiro comando em segundo plano; &&executa o primeiro comando e segue condicionalmente para o segundo se sair com sucesso.
David Bodow

Respostas:

146

Isso &faz com que o comando seja executado em segundo plano.

De man bash:

Se um comando for encerrado pelo operador de controle & , o shell executa o comando em segundo plano em um subshell. O shell não espera o comando terminar e o status de retorno é 0.

mgarciaisaia
fonte
12

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 **

Zack S
fonte
nohupirá manter os processos vivos também.
Jerry Chin
2
com & podemos obter o PID também para que possamos encerrar o processo se quisermos e também podemos verificar o status desse processo
Dhaval Solanki
12

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.

sh my_script.sh &

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:

nohup sh my_script.sh &

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 .

Timothy Jannace
fonte
1

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 usar SIG_IGNpara ignorar todos os sinais ou SIG_DFLrestaurar 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.

Kaustubh Kislay
fonte