Quando um processo chama vfork , o pai permanece no estado D, desde que o filho não tenha executado _exit ou execve (as duas únicas funções autorizadas, juntamente com execve como parentesexecvp, etc.). O pai ainda está executando a chamada vfork , então está no estado D.
Se a criança fizer algo assim (o que é estúpido, mas válido), o pai permanecerá no estado D indefinidamente, enquanto o filho permanecerá no estado R indefinidamente.
if (!vfork()) while (1) {}