entorno de programación Linux -waitpid con un tenedor y execlp

  
 

waitpid (esperar la interrupción niño o al final) archivos de cabecera # include < sys /types.h > # incluyen < sys /wait.h > define waitpid función pid_t (pid pid_t, int * estado, las opciones de INT); función Descripción waitpid () se detendrá temporalmente la ejecución del proceso actual, o hasta que la señal llegó al final del proceso hijo. Si el proceso hijo ha terminado cuando se llama a wait (), y luego esperar () retornará inmediatamente el valor de estado final proceso hijo. Finalización de valor de estado es devuelta por el estado de parámetros de proceso niño, mientras que el proceso hijo será devuelto junto con el código de identificación. Si el estado final no le importa el valor, el parámetro de estado se puede establecer en NULL. Pid del parámetro de proceso secundario que se espera de un código de identificación, otros valores el siguiente significado: pid < -1 esperando código de identificación de grupo de proceso como un valor absoluto de cualquier pid sub-proceso. pid = -1 esperar por cualquier proceso hijo equivalente a esperar (). pid = 0 el proceso espera a que el identificador de grupo actual con el mismo proceso de cualquier proceso secundario. pid > 0 para esperar por cualquier proceso hijo identificador pid del proceso hijo. opción de parámetro puede ser 0 o una combinación de los siguientes O: WNOHANG Si se devuelve inmediatamente sin proceso hijo ha terminado, no se espera. WUNTRACED si el proceso hijo para entrar en suspender la aplicación del derecho a regresar, pero el estado final no debe ser ignorado. Después del final del estado del proceso de niño vuelve almacenados en estado, bajo unos macros puede determinar el final de procedimiento: WIFEXITED (status) si el proceso hijo termina normalmente, en comparación con un valor distinto de cero. WEXITSTATUS (estado) para obtener la salida de proceso hijo () devuelve el código de fin, por lo general primero con WIFEXITED para determinar si el final normal para utilizar esta macro. WIFSIGNALED (status) si el proceso hijo se terminó porque la señal es cierto, entonces esta macro WTERMSIG (status) adquiere un código de señal que el niño abortado debido a una señal, y se determinará normalmente por WIFSIGNALED después de su uso esta macro. WIFSTOPPED (estado) si el niño está en suspender la ejecución de la macro es cierto. Por lo general sólo se utiliza cuando WUNTRACED tiene esta situación. código WSTOPSIG (status) que causó que el proceso hijo para obtener una pausa de la señal, el general será determinado después del primer uso WIFSTOPPED utilizar esta macro. Si se devuelve éxito ID proceso hijo (PID), si hay se devuelve un valor de retorno de error de -1. El motivo del error se almacena en errno. /* ****** waitpid.c - uso simple espera ********* /# include < unistd.h > # include < sys /types.h > # include < sys /esperan .h > # include < stdio.h > # include < stdlib.h > int main (void) {childpid pid_t; int status; childpid = tenedor (); si (-1 == childpid) {perror (" tenedor () "); salida (EXIT_FAILURE);} else if (0 == childpid) {puts (" en curso " infantil;); sueño (3); //hacer que el proceso hijo etapas de 3 segundos para ver el padre printf comportamiento (" \\ tchild pid =% d \\ n ", getpid ()); printf (" \\ tchild ppid =% d \\ n ", getppid ()); salida (EXIT_SUCCESS);} else {waitpid ( childpid, &de estado, 0); puts (" en padre "); printf (" \\ tparent pid =% d \\ n ", getpid ()); printf (" \\ tparent ppid =% d \\ n " , getppid ()); printf (" \\ proceso tchild salió con el estado% d \\ n ", estado );} Salir (EXIT_SUCCESS);} [root @ localhost src] # gcc waitpid.c [root @ localhost src] # ./a.out En proceso hijo niño ppid pid = 4469 = 4468 niño en pid = 4468 padres de los padres de los padres ppid = 4379 proceso hijo terminó con el estado 0 [root @ localhost src] # Cuando lo anterior y " waitpid (childpid, &estatus, 0); " en comentario la línea, los resultados de la ejecución del programa son los siguientes: [root @ localhost src] # ./a.out en proceso hijo de padre a padre pid = 4481 = 4379 padres ppid proceso hijo terminó con el estado 1331234400 ppid pid [root @ localhost src] # niño = 4482 = 1 niño proceso hijo no ha dejar de fumar, se ha retirado del proceso padre .

tenedor

Función de tenedor (), archivo de cabecera llamada del sistema Linux: # include < unistd.h > definición de función: int tenedor (void); Valor de retorno: vuelve el proceso hijo 0, matriz devuelve el identificador de proceso hijo, la función devuelve -1 error Descripción: un proceso existente puede llamar a la función tenedor para crear un nuevo proceso. El nuevo proceso creado por tenedor se llama el proceso hijo (proceso hijo). tenedor función se llama una vez, pero vuelve dos veces. La única diferencia entre los dos es el retorno del proceso hijo devuelve un valor de 0 se devuelve en el niño y el ID del proceso padre. El proceso hijo es una copia del proceso padre, se pondrá el espacio de proceso de datos de los padres, montón, pila copia del recurso y así sucesivamente. Tenga en cuenta que el niño se lleva a cabo por el espacio de almacenamiento de la y " no comparten el espacio de almacenamiento entre copia y ", lo que significa que el padre y el niño, el intercambio entre su espacio de almacenamiento sólo el segmento de código. Código de ejemplo: # include < unistd.h > # include < stdio.h > int main (int argc, void ** argv) {int pid = tenedor (); si (pid < 0) {//impresión ( "! error ");} else if (pid == 0) {//impresión (" Este es el proceso hijo "!);} else {//impresión (" Este es el hijo del proceso padre! proceso de id =% d ", pid);} return 0;} variable de


execlp

execlp (entorno PATH para encontrar el archivo y ejecutar) función de correlación: tenedor , execl, execle, execv, execve, archivo de cabecera execvp: # include < unistd.h > función definida: execlp int (archivo * const char, const char * arg, y hellip; …); función Descripción: execlp () se encontrar entorno de la ruta del directorio nombres de los archivos que se refiere a la variable de acuerdo con el archivo de parámetros, busque el archivo después de la ejecución, a continuación, la segunda y siguientes parámetros como el archivo argv [0], argv [1] y hellip; …, el último argumento debe ser un puntero con un nulo (NULL) Para el final. Valor de retorno: Si la función no devuelve a cabo con éxito, el retorno directo -1 si falla, causa del fallo almacenado en el errno. Error execve Código de Referencia (). Ejemplo: /* ejecutar ls /etc /execlp passwd -Al () para encontrar /bin /ls * /# incluyen < según variable PATH /bin; unistd.h > main () {execlp (y " ls y ", " LS ", " -al y ", " /etc /passwd y ", (char *) 0);} realizado: -rw-r - r-- 1 root root 705 Sep 3 13: 52 /etc /passwd — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — añadir por execl love_aiqiu NOMBRE, execlp, execle, execv, execvp - ejecutar un #include archivo SINOPSIS < unistd.h > extern char ** ambiental; int execl (const char * camino, const char * arg, ...); int execlp (char * const archivo, const char * arg, ...); int execle (const char * camino, const char * arg, ..., char * const envp []); int execv (const char * camino, const char * argv []); int execvp (archivo const char *, const char * argv []);

Copyright © Conocimiento de Windows All Rights Reserved