Algunos conocimientos de programación sobre Linux (1) Escriba un programa pequeño y use fork(), vfork o clone() para crear procesos secundarios. (2) Compare sus condiciones de operación.
Crea un nuevo proceso forkdemo1.c:
/* forkdemo1.c
* Muestra cómo fork crea dos procesos que se pueden distinguir
* Muestra cómo fork crea dos procesos que se pueden distinguir
* Muestra cómo fork crea dos procesos que se puede distinguir
* Muestra cómo fork crea dos procesos, que se pueden distinguir
* Muestra cómo fork crea dos procesos, que se pueden distinguir
* Mostrar Cómo fork crea dos procesos. Se puede distinguir por los diferentes valores de retorno de fork()
*
*/
#include lt; p>
main()
{
int ret_from_fork, mypid;
mypid = getpid() /* ¿Quién soy? */
printf("Antes: mi pid es d\n", mypid); /* díselo al mundo */
ret_from_ fork = fork();
sleep(1);
printf("Después: mi pid es d, fork() dijo d\n",
getpid(), ret_from_fork
p> p>}
Proceso de creación de procesos secundarios forkdemo2.c:
/* forkdemo2.c: muestra cómo el proceso secundario regresa de fork()
* y ejecutar cualquier código que quieran,
* incluso fork(). Predice el número de filas de salida.
*/
main()
{
printf("mi pid es d\n", getpid() );
bifurcación();
bifurcación();
bifurcación();
de bifurcación(); p>from fork();c:
/* forkdemo3.c - muestra cómo el valor de retorno de fork()
* permite que el proceso determine
* ¿Es un subproceso o un proceso?
*/
#include lt;stdio.hgt;
main()
{ p>
int fork_rv;
printf("Antes: mi pid es d\n", getpid()); *Crear nuevo proceso*/
if ( fork_rv == -1 ) /*Comprobar errores*/
perror("fork");
else if ( fork_rv = = 0 )
printf("Yo soy el niño.my pid=d\n", getpid()); el padre. mi hijo es d\n", fork_rv);
}
El padre espera hasta que el niño termine
waitdemo.c:
/ * waitdemo.c: muestra cómo el proceso principal se pausa hasta que se completa el proceso secundario
*/
#include lt;stdio.hgt;
#define DEMORA 2
main()
{
int newpid;
void child_code(), parent_code(); p>
printf("antes: mypid es d\n", getpid());
if ( (newpid = fork()) == -1 )
perror("fork" );
else if ( newpid == 0 )
child_code(DELAY);
else
parent_code; (newpid);
}
/*
* El nuevo proceso se queda dormido y sale
*/
void child_code(int retraso)
{
printf("niño d aquí.dormirá durante d segundos\n", getpid(), retraso);
dormir(retraso) ;
printf("niño hecho.a punto de salir\n");
salir(17);
} p>
}
/*
* El proceso padre espera al proceso hijo y luego imprime la información
*/
void código_padre(int
childpid)
{
int wait_rv; /* valor de retorno de wait()*/
wait_rv = wait(NULL);
printf("he terminado de esperar por d. Espera devuelta: d\n", childpid, wait_rv
}
);