Você não pode criar um processo zumbi. Quando você bifurca um processo e esse processo bifurcado (filho) termina, ele envia um código de retorno. Se o processo pai não estiver esperando por esse código de retorno, o processo filho se tornará um zumbi (o processo filho, que morre e o pai não sabe).
Na linguagem C, seria uma função wait () no processo pai que lê o valor de retorno.
Uma solução alternativa comum para isso (se você não tiver intenção no processo pai de esperar por um código de retorno do filho) é dobrar o fork. Isso significa que o seu processo principal A criará um novo processo B, que iniciará o processo C. O processo B termina imediatamente, o processo A pode receber seu código de retorno logo após iniciá-lo. O processo C fará o que for necessário (imprimindo etiquetas no seu caso) e, quando terminar, enviará um código de retorno. Seu processo pai B já está morto, então o sistema cuidará dele (processo com o pid 1 no passado, não tenho certeza de como isso funciona agora). E não vai se tornar um zumbi.
Editar: Aqui está um exemplo que encontrei no link A primeira, se a sequência for o processo A depois de uma bifurcação, apenas aguardará que seu processo filho B seja concluído.
int main()
{
pid_t p1 = fork();
if (p1 != 0)
{
printf("p1 process id is %d", getpid());
wait();
system("ps");
}
else
{
pid_t p2 = fork();
int pid = getpid();
if (p2 != 0)
{
printf("p2 process id is %d", pid);
}
else
{
printf("p3 process id is %d", pid);
}
exit(0);
}
}