C: Indo para background com o daemon()

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.

This entry was posted in C and tagged , , , , , , . Bookmark the permalink.

2 Responses to C: Indo para background com o daemon()

  1. Eugeni says:

    O certo não seria:
    if (daemon(0, 0)) {
    printf(“Erro indo para background.\n”);
    return 1;
    }
    ???

  2. Eugeni, você está certo. Vou corrigir. Obrigado.

Leave a Reply

Your email address will not be published. Required fields are marked *