Sistemas operativos modernos
Señal Causa SIGABRT Enviada para abortar un proceso y realizar un vaciado de memoria SIGALRM El reloj de alarma “sonó" SIGFPE Hubo un error de punto flotante (por ejemplo, división entre 0) SIGHUP Se colgó la línea telefónica que usaba el proceso SIGILI El usuario oprimió SUPR para interrumpir el proceso SiGQUIT El usuario oprimió la tecla que pide un vaciado de memoria SIGKILL Enviada para eliminar un proceso (no puede atraparse ni Ignorarse) SIGPIPE El proceso escribió en una canalización que no tiene lectores SIGSEGV El proceso hizo referencia a una dirección de memoria no válida SIGTERM Empleado para solicitar que un proceso termine de manera ordenada SIGUSR1 Disponible para usos definidos por la aplicación SIGUSR2 Disponible para usos definidos por la aplicación Figura 10-5. Señales requeridas por POSIX. Ésta es la única forma de crear un nuevo proceso en sistemas UNIX. Fork crea un duplicado exacto del proceso original, incluidos todos los descriptores de archivo, registros y demás. Des pués de la bifurcación o división, el proceso original y la copia (el padre y el hijo) siguen cada cual su camino. Todas las variables tienen valores idénticos en el momento de la bifurcación, pe ro dado que la imagen de núcleos completa del padre se copia para crear el hijo, los cambios subsiguientes a una de ellas no afectarán a la otra. La llamada fork devuelve un valor, que es cero en el hijo e igual al PID del hijo en el padre. Con base en el PID devuelto, los dos proce sos pueden saber cuál es el padre y cuál el hijo. En casi todos los casos, después de la división, el hijo tendrá que ejecutar código distinto al que ejecuta el padre. Consideremos el caso del shell, que lee un comando de la terminal, se bifur ca en un proceso hijo, espera hasta que el hijo termina de ejecutar el comando y lee el siguiente comando cuando el hijo termina. Para esperar a que el hijo termine, el padre ejecuta una llama da al sistema waitpid, que tan sólo espera hasta que el hijo termina (cualquier hijo, si hay más de uno). Waitpid tiene tres parámetros. El primero permite al invocador esperar a que termine un hi jo específico. Si es -1, puede ser cualquier hijo anterior (es decir, el primero que termine). El se gundo parámetro es la dirección de una variable a la que se asignará el estado de salida del hijo (terminación normal o anormal, y valor de salida). El tercero determina si el invocador se blo quea o regresa si ningún hijo ha terminado. En el caso del shell, el proceso hijo debe ejecutar el comando tecleado por el usuario. Es to lo hace utilizando la llamada al sistema exec, que causa que toda su imagen de núcleos sea sustituida por el archivo nombrado en su primer parámetro. En la figura 10-7 se muestra un shell muy simplificado que ilustra el uso de fork, waitpid y exec. En el caso más general, exec tiene tres parámetros: el nombre del archivo a ejecutar, un apuntador al arreglo de argumentos y un apuntador al arreglo de entorno, los cuales describi-
RkJQdWJsaXNoZXIy MjI4NDcx