5.1 fork()系统调用

系统调用fork()用于创建新进程

子进程不会从main函数开始执行,而是从fork系统调用

  • 子进程有自己的地址空间(即自己的私有内存)、寄存器、程序计数器等。

父进程获得子进程的PID,子进程获得的返回值是0。

5.2 wait()系统调用

wait()系统调用会在子进程运行结束后才返回

5.3 exec()系统调用

这个系统调用可以让子进程执行与父进程不同的程序

5.4 为什么这样设计API

shell也是一个用户程序,它首先是一个提示符(prompt),然后等待用户输入。可以向它输入一个命令,大多数情况下,shell可以在文件系统中找到这个可执行程序,调用fork()创建新进程,并调用exec()的变体来执行这个可执行程序,调用wait()等待该命令完成。子进程结束后,shell从wait返回并再次输出一个提示符,等待下一个命令。

  • fork和exec的分离,让shell可以方便实现很多功能