fork() 系统调用的工作
Working of fork() system call
这是我的代码 -->>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
int i ;
int x = 10 ;
int pid1, pid2, status ;
printf("Before forking, the value of x is %d\n", x);
/*
After forking, we make the parent and its two children
increment x in different ways to illustrate that they
have different copies of x
*/
if ((pid1 = fork()) == 0) {
/* First child process */
for (i=0 ; i < 5; i++) {
printf("\t\t\t At first child: x= %d\n", x);
x= x+10;
sleep(2) ; /* Sleep for 1 second */
}
}
else {
/* Parent process */
/* Create another child process */
if ((pid2 = fork()) == 0) {
/* Second child process */
for (i=0 ; i < 5; i++) {
printf("\t\t\t\t\t\t At second child: x= %d\n", x);
x= x+20;
sleep(2) ; /* Sleep for 1 second */
}
}
else {
/* Parent process */
for (i=0 ; i < 5; i++) {
printf("At parent: x= %d\n", x);
x= x+5;
sleep(1) ; /* Sleep for 1 second */
}
/*
The waitpid() system call causes the parent
to wait for a child process with a specific pid to complete
its execution. The input parameter can
specify the PID of the child process for
which it has to wait.
*/
waitpid(pid1, &status, 0);
waitpid(pid2, &status, 0);
}
}
}
这个输出就像--->
分叉前,x的值为10
秒 child: x= 10
秒 child: x= 30
秒 child: x= 50
秒 child: x= 70
秒 child: x= 90
分叉前,x的值为10
最初child: x= 10
最初child: x= 20
最初child: x= 30
最初child: x= 40
最初child: x= 50
分叉前,x的值为10
在 parent: x= 10
在 parent: x= 15
在 parent: x= 20
在 parent: x= 25
在 parent: x= 30
为什么 printf 语句 "Before forking , the value of x is 10" 在所有 fork() 系统调用之上时被打印三次。 ??请帮忙。
您应该在每个 fork()
之前调用 fflush(stdout)
。
这是我的代码 -->>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
int i ;
int x = 10 ;
int pid1, pid2, status ;
printf("Before forking, the value of x is %d\n", x);
/*
After forking, we make the parent and its two children
increment x in different ways to illustrate that they
have different copies of x
*/
if ((pid1 = fork()) == 0) {
/* First child process */
for (i=0 ; i < 5; i++) {
printf("\t\t\t At first child: x= %d\n", x);
x= x+10;
sleep(2) ; /* Sleep for 1 second */
}
}
else {
/* Parent process */
/* Create another child process */
if ((pid2 = fork()) == 0) {
/* Second child process */
for (i=0 ; i < 5; i++) {
printf("\t\t\t\t\t\t At second child: x= %d\n", x);
x= x+20;
sleep(2) ; /* Sleep for 1 second */
}
}
else {
/* Parent process */
for (i=0 ; i < 5; i++) {
printf("At parent: x= %d\n", x);
x= x+5;
sleep(1) ; /* Sleep for 1 second */
}
/*
The waitpid() system call causes the parent
to wait for a child process with a specific pid to complete
its execution. The input parameter can
specify the PID of the child process for
which it has to wait.
*/
waitpid(pid1, &status, 0);
waitpid(pid2, &status, 0);
}
}
}
这个输出就像--->
分叉前,x的值为10
秒 child: x= 10
秒 child: x= 30
秒 child: x= 50
秒 child: x= 70
秒 child: x= 90
分叉前,x的值为10
最初child: x= 10
最初child: x= 20
最初child: x= 30
最初child: x= 40
最初child: x= 50
分叉前,x的值为10
在 parent: x= 10
在 parent: x= 15
在 parent: x= 20
在 parent: x= 25
在 parent: x= 30
为什么 printf 语句 "Before forking , the value of x is 10" 在所有 fork() 系统调用之上时被打印三次。 ??请帮忙。
您应该在每个 fork()
之前调用 fflush(stdout)
。