The wait() syscall is often used with the fork() syscall.
Indeed, with the wait() syscall we can be sure that the child will be executed before the parent process.
In a trivial vision, this is like mutexes for threads.
It means that without the following line, the parent and the child will be executed at the same time:
wait(&status);
If you want to try it, change the line:
while (i < 10)
by this one on both parent and child loops:
while (i < 100000)
They will be executed at the same time!
Let's see it in this wait() tutorial.
/** * Badprog.com * main.c */ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <string.h> #include <errno.h> typedef struct s_forky { int value; } t_forky; int main() { int i; int status; pid_t f; t_forky forky; forky.value = 0; i = 0; status = 1; f = fork(); if (f < 0) { fprintf(stderr, "Error: %s - fork() < 0 (%d)\n", strerror(errno), f); } else if (f > 0) { wait(&status); printf("\n===== Begin Parent =====\n\n"); printf("fork() = %d\n", f); printf("getpid() = %d\n", getpid()); while (i < 10) { printf(" Parent - forky.value = %d\n", forky.value); ++forky.value; ++i; } } else { printf("\n===== Begin Child =====\n\n"); printf("fork() = %d\n", f); printf("getpid() = %d\n", getpid()); while (i < 10) { printf(" Child - forky.value = %d\n", forky.value); ++forky.value; ++i; } } printf("status = %d\n", status); printf("forky.value = %d\n\n", forky.value); printf("===== End =====\n\n"); return 0; }
gcc main.c -o forkIt ; ./forkIt
===== Begin Child ===== fork() = 0 getpid() = 23817 Child - forky.value = 0 Child - forky.value = 1 Child - forky.value = 2 Child - forky.value = 3 Child - forky.value = 4 Child - forky.value = 5 Child - forky.value = 6 Child - forky.value = 7 Child - forky.value = 8 Child - forky.value = 9 status = 1 forky.value = 10 ===== End ===== ===== Begin Parent ===== fork() = 23817 getpid() = 23816 Parent - forky.value = 0 Parent - forky.value = 1 Parent - forky.value = 2 Parent - forky.value = 3 Parent - forky.value = 4 Parent - forky.value = 5 Parent - forky.value = 6 Parent - forky.value = 7 Parent - forky.value = 8 Parent - forky.value = 9 status = 0 forky.value = 10 ===== End =====
So, are you wait() or not?
Add new comment