第一部分:
《深入理解计算机系统》练习题中涉及到fork的程序
一、8.12
这一题的代码为:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
void doit()
{
fork();
fork();
printf("hello\n");
return;
}
int main()
{
doit();
printf("hello\n");
exit(0);
}
运行程序,调用函数doit(),随后调用fork()生成子进程和父进程,两个进程各自又一次调用fork()函数,最终有四个进程运行,每个进程都进行doit函数中的下一步,输出hello,随后每个进程都return到main函数,接着又一次输出hello,最终exit退出。
进程图如下:
运行结果如下:
二、8.13
这一题的代码为:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
int main()
{
int x=3;
if(fork()!=0)
printf("x=%d\n",++x);
printf("x=%d\n",--x);
exit(0);
}
运行程序,x初始值为3,调用一次fork函数,生成两个进程,如果fork()!=0即是父进程,输出++x,并执行下一语句输出–x;如果是子进程,则直接执行条件语句外的输出–x,最终exit退出。
进程图如下:
运行结果如下:
三、8.14
这一题的代码为:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
void doit()
{
if(fork()==0){
fork(