Sistemas operativos modernos

Llamada al sistema Descripción pid = fork() Crea un proceso hijo idéntico al padre pid = waitpid(pid, &statioc, opcs) Espera a que un hijo termine s = execve(name, argv, environp) Sustituye la imagen del núcleo de un proceso exit(status) Termina la ejecución de proceso y devuelve el estado s = sigaction(sig, &acf, &oldact) Define la acción a efectuar al recibir señales s = sigretum(&context) Regresa después de una señal s = sigprocmask(how, &set, &old) Examina o modifica máscara de señal s = sígpending(set) Obtiene el conjunto de señales bloqueadas s = sigsuspend(sigmask) Sustituye máscara de señal y suspende el proceso s = kill(pid, sig) Envía una señal a un proceso residual = álarm(seconds} Pone el reloj de alarma s - pause( ) Suspende el invocador hasta la siguiente señal Figura 10-6. Algunas llamadas al sistema relaciohadas con procesos. El código de re­ torno s es -1 si hubo un error, pid es un identificador de proceso y residual es el tiem­ po que queda en la alarma anterior. Los parámetros son lo que el nombre sugiere. while (TRUE) { type_prompt( ); r se repite indefinidamente V /* pone el indicador de comandos en pantalla *, read_command(command, params); /* lee la línea de entrada del teclado V /* bifurca un proceso hijo V pid = fork( ): if (pid < 0) ( printfC'Imposible bifurcarse); continue; } If (pid != 0) { waitpid (-1, &status, 0); } else { execve(command, params, 0); } /* condición de error V /* repite el ciclo V /* el padre espera al hijo */ /* el hijo hace el trabajo V Figura 10-7. Shell muy simplificado. remos en breve. Se proporcionan varios procedimientos de biblioteca, que incluyen execl, execv, execle y execve, para poder omitir los parámetros o especificarlos de diversas formas. To­ dos estos procedimientos invocan la misma llamada al sistema. Aunque la llamada al sistema es exec, no existe ningún procedimiento de biblioteca con este nombre; debe usarse alguno de los otros.

RkJQdWJsaXNoZXIy MjI4NDcx