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.