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) {}