tal vez este errado pero bue ahi mi intento de ayuda
void pwd(){
...
case 0:
execlp("pwd","pwd",NULL);
break;si entendí bien...cuando se usa la función pwd una de las opciones es usar una función llamada execlp y le pasas como parámetro la misma función pwd?...ahí creo que se hace la imposibilidad de salir del bucle