¿Cuáles pueden ser las causas por las que se termina o no se termina un programa?
Un programa secuencial termina cuando se ha ejecutado su última instrucción. El sistema operativo suele saber cuando ocurre eso.
Sin embargo puede ser difícil detectar cuando un programa concurrente ha terminado, sobre todo cuando también el sistema operativo sea distribuido.
Un programa concurrente termina cuando todas sus partes secuenciales han terminado.
Si el sistema distribuido contiene un procesador central que siempre está monitorizando a 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 en especial los canales de comunicación se resisten a la inspección y pueden contener mensajes aún no recibidos.