一个 进程由两部分组成,一部分是用户内存空间(指令,数据,栈),另一
部分是仅对内核可见的进程状态。提供了分时特性:它在可用 )*之间不断切换,
决定哪一个等待中的进程被执行。当一个进程不在执行时,保存它的 )*寄存器,
当他们再次被执行时恢复这些寄存器的值。内核将每个进程和一个 关联起来。
一个进程可以调用系统调用 %-6来创建一个新的进程。%-6创建的新进程被称为
子进程,子进程的内存中的内容同创建它的进程(父进程)一样。%-6函数在父进程、
子进程中都返回(一次调用两次返回)。对于父进程它返回子进程的 ,对于子进
程它返回 '。考虑下面这段代码:
int pid;
pid = fork();
if(pid > 0){
printf("parent: child=%d\n", pid);
pid = wait();
printf("child %d is done\n", pid);
} else if(pid == 0){
printf("child: exiting\n");
exit();
} else {
printf("fork error\n");
}
系统调用 &6会导致调用它的进程停止运行,并且释放诸如内存和打开文件在内
的资源。系统调用 !&6会返回一个当前进程已退出的子进程,如果没有子进程退出,
!&6会等候直到有一个子进程退出。在上面的例子中,下面的两行输出
parent: child=1234
child: exiting
可能以任意顺序被打印,这种顺序由父进程或子进程谁先结束 &%6决定。当子
进程退出时,父进程的 !&6也就返回了,于是父进程打印:
5
评论0
最新资源