Sistemas operativos modernos
nú en el que el usuario puede hacer clic para indicar al proceso que borre los archivos tempo rales que tenga abiertos y luego termine. El segundo motivo para terminar es que el proceso descubra un error fatal. Por ejemplo, si un usuario teclea el comando cc algo.c para compilar el programa algo.c y no existe tal archivo, el compilador simplemente termina rá. Por lo general los procesos interactivos por pantalla no terminan cuando se les proporcio nan parámetros no válidos. En vez de eso, abren un cuadro de diálogo en el que se pide al usuario intentarlo otra vez. El tercer motivo para terminar es un error causado por el proceso, a menudo debido a un de fecto en el programa. Ejemplos de esto son ejecutar una instrucción no permitida, hacer referen cia a memoria que no existe y dividir entre cero. En algunos sistemas (por ejemplo, UNIX), un proceso puede indicar al sistema operativo que desea manejar ciertos errores él mismo. En este caso, si se presenta alguno de esos errores, se envía una señal (interrupción) al proceso, en lu gar de terminarlo. La cuarta razón por la que un proceso podría terminar es que otro proceso ejecute una lla mada para pedir al sistema operativo que termine el proceso en cuestión. En UNIX la llamada es kill. La función correspondiente en Win32 es TerminateProcess. En ambos casos, el pro ceso que ejecuta la llamada debe contar con la debida autorización. En algunos sistemas, cuan do un proceso termina, sea en forma voluntaria o no, todos los procesos que creó también finalizan de inmediato. Sin embargo, ni UNIX ni Windows funcionan así. 2.1.4 Jerarquías de procesos En algunos sistemas, cuando un proceso crea otro, el proceso padre y el hijo mantienen cierta asociación. El proceso hijo puede, a su vez, crear más procesos y formar así una jerarquía de procesos. Cabe señalar que, a diferencia de los seres que se reproducen sexualmente, un pro ceso sólo tiene un padre (y cero, uno, dos o más hijos). En UNIX, un proceso, todos sus hijos y sus demás descendientes forman un grupo de pro cesos. Cuando un usuario envía una señal desde el teclado, ésta se entrega a todos los miem bros del grupo de procesos asociado en ese momento con el teclado (por lo regular, todos los procesos activos que se crearon en la ventana actual). De manera individual, cada proceso pue de atrapar la señal, ignorarla o realizar la acción predeterminada, que es finalizar a causa de la señal. Como un ejemplo más del papel que desempeña la jerarquía de procesos, veamos cómo se prepara UNIX al principio cuando se le pone en marcha. Un proceso especial, llamado init, es tá presente en la imagen de arranque. Cuando dicho proceso comienza a ejecutarse, lee un ar chivo que indica cuántas terminales hay y genera un proceso nuevo por cada una. Estos procesos esperan a que alguien inicie sesión. Si hay un inicio de sesión (login) exitoso, el pro ceso login ejecuta un shell para aceptar comandos. Estos podrían generar más procesos, y así
RkJQdWJsaXNoZXIy MjI4NDcx