Requisito previo: introducción de fork , getpid() y getppid()
Declaración del problema: escriba un programa para crear un padre con tres hijos usando la función fork() donde cada proceso encuentra su Id. Por ejemplo :
Output :parent 28808 28809 my id is 28807 First child 0 28810 my id is 28808 Second child 28808 0 my id is 28809 third child 0 0
Explicación: aquí, usamos la función fork() para crear cuatro procesos, uno principal y tres secundarios.
- Un proceso existente puede crear uno nuevo llamando a la función fork().
- El nuevo proceso creado por fork() se llama proceso hijo.
- Estamos usando aquí getpid() para obtener la identificación del proceso
- En fork() el proceso total creado es = 2^número de fork()
Nota: en algún momento, no es necesario que el proceso secundario se ejecute primero o que el proceso principal reciba primero la CPU asignada, a cualquier proceso se le puede asignar la CPU, en algún momento cuántico. Además, la identificación del proceso puede diferir durante diferentes ejecuciones.
Código 1 – Usogetpid()
// C++ program to demonstrate creating processes using fork() #include <unistd.h> #include <stdio.h> int main() { // Creating first child int n1 = fork(); // Creating second child. First child // also executes this line and creates // grandchild. int n2 = fork(); if (n1 > 0 && n2 > 0) { printf("parent\n"); printf("%d %d \n", n1, n2); printf(" my id is %d \n", getpid()); } else if (n1 == 0 && n2 > 0) { printf("First child\n"); printf("%d %d \n", n1, n2); printf("my id is %d \n", getpid()); } else if (n1 > 0 && n2 == 0) { printf("Second child\n"); printf("%d %d \n", n1, n2); printf("my id is %d \n", getpid()); } else { printf("third child\n"); printf("%d %d \n", n1, n2); printf(" my id is %d \n", getpid()); } return 0; }
Producción –
parent 28808 28809 my id is 28807 First child 0 28810 my id is 28808 Second child 28808 0 my id is 28809 third child 0 0
Código 2 – Usogetppid()
// C++ program to demonstrate creating processes using fork() #include <unistd.h> #include <stdio.h> int main() { // Creating first child int n1 = fork(); // Creating second child. First child // also executes this line and creates // grandchild. int n2 = fork(); if (n1 > 0 && n2 > 0) { printf("parent\n"); printf("%d %d \n", n1, n2); printf(" my id is %d \n", getpid()); printf(" my parentid is %d \n", getppid()); } else if (n1 == 0 && n2 > 0) { printf("First child\n"); printf("%d %d \n", n1, n2); printf("my id is %d \n", getpid()); printf(" my parentid is %d \n", getppid()); } else if (n1 > 0 && n2 == 0) { printf("second child\n"); printf("%d %d \n", n1, n2); printf("my id is %d \n", getpid()); printf(" my parentid is %d \n", getppid()); } else { printf("third child\n"); printf("%d %d \n", n1, n2); printf(" my id is %d \n", getpid()); printf(" my parentid is %d \n", getppid()); } return 0; }
Producción –
parent 5219 5220 my id is 5217 my parentid is 5215 First child 0 5221 my id is 5219 my parentid is 1 second child 5219 0 my id is 5220 my parentid is 1 third child 0 0 my id is 5221 my parentid is 1
Este artículo es una contribución de Pushpanjali Chauhan . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA