¿Cuáles pueden ser las causas por qué se termina o no se termina un programa?
Un programa secuencial termina cuando su ha ejecutado su última instrucción. El sistema operativa suele saber cuando eso ocurre.
Sin embargo puede ser difícil detectar cuando un programa concurrente ha terminado, sobre todo cuando también el sistema operativo esté distribuido.
Un programa concurrente termina cuando todos sus partes secuenciales hayan terminado.
Si el sistema distribuido contiene un procesador central que siempre está monitorizando los demás, se puede implementar la terminación igual como en un sistema secuencial.
Si el sistema no dispone de tal procesador central es más difícil porque no se puede observar fácilmente el estado exacto del sistema dado que sobre todos los canales de comunicación se resisten a inspección y pueden contener todavía mensajes no recibidas.