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.


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.


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


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 .


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.