A forma tradicional de um programa ir para background é fazendo um fork(), terminar o processo pai e criar uma nova sessão com setsid(). Outra forma mais simples, que de fato encapsula tudo isso e mais um pouco, é apenas usar a função daemon, como o Ademar sugeriu neste comentário.
#include <stdio.h> #include <unistd.h> int main(void) { if (daemon(0, 0)) { printf("Erro indo para background.\n"); return 1; } printf("Esta mensagem nao deve ser impressa.\n"); sleep(10); // Durma por dez segundos antes de sair return 0; }
Nada será impresso porque ao passar zero para o segundo parâmetro da função, faz com a saída padrão seja redirecionada para /dev/null, assim como o Cláudio ensinou (e agora vi que dupliquei a dica dele).
Uma vez bem sucedido o comando, nosso processo estará rodando em background desconectado do terminal que o invocou. Você poderá observar que mesmo após o retorno instantâneo do terminal, o nosso programa ainda aparecerá na lista de processos por 10 segundos.
O certo não seria:
if (daemon(0, 0)) {
printf(“Erro indo para background.\n”);
return 1;
}
???
Eugeni, você está certo. Vou corrigir. Obrigado.