A definição simples é um processo que não está conectado a um terminal ou display ativo ... Mas existem várias maneiras de conseguir isso:
-
A maioria do que consideramos processos de segundo plano são serviços do sistema. Eles geralmente são iniciados por um daemon de inicialização de alto nível (Upstart, Systemd, etc) e geralmente permanecem como filhos desse daemon. Ele terá sua saída solicitada pelo daemon de inicialização para fins de registro.
-
Um processo desassociado é onde você altera o pai do processo para PID = 0,
/sbin/init
. Isto significa que mesmo que você feche seu terminal ou sessão X, o processo permanecerá (contanto que não dependa de outras coisas - como uma sessão X). Existem muitas maneiras de realizar isso . A menos que redirecionado de outra forma, nada acontece com a saída de processos desassociados depois que o terminal morre.É importante notar que dissociação não significa necessariamente background , mas se o terminal atual morrer, o processo é automaticamente considerado "em segundo plano" porque não tem como gerenciar sua IO. / p>
-
Em seguida, existem shells virtuais que podem ser executados em segundo plano e "manter" seus processos ativos abertos para você.
screen
é provavelmente o melhor exemplo disso. Ele permite desconectar e reconectar várias sessões de terminal, o que é útil se você precisa preservar um fluxo de trabalho de terminal em um servidor (ou executar algo com saída indefinidamente, comoirssi
, um cliente de IRC). -
Por último, existe a definição da shell. Muitas shells (interfaces de linha de comando como Bash) permitem que você faça um processo em segundo plano. Isso significa simplesmente que os arquivos IO STDOUT, STDIN e STDERR estão desconectados do terminal atual. O processo continua executando em seu próprio segmento e você recebe outro aviso. O processo não é automaticamente desassociado, portanto, se a sessão de Bash for fechada, todas as suas tarefas em segundo plano serão encerradas. Aqui está um exemplo simples com o Bash .