fork()和exec()是Unix/Linux系统编程中常用的两个函数,主要用于创建新进程
fork()
- 创建一个新的子进程,这个子进程是父进程的副本。
- 子进程获得父进程数据空间、堆和栈的副本。
- 在父进程中,fork()返回子进程的PID;在子进程中,fork()返回0。
- 子进程从fork()的位置开始执行。
使用场景
- 当你需要创建一个与父进程并行运行的新进程时。
- 在需要执行一些并行任务,但仍然需要使用原程序的大部分代码时。
exec()
- 用新的进程镜像替换当前进程镜像。
- exec()调用成功后不会返回,因为整个进程都被新程序替换了。
- exec()只有出错时才返回,返回-1。
使用场景
- 当你想要在当前进程中启动一个全新的程序时。
- 在shell实现中,用于执行用户输入的命令。
实际应用demo
- 使用fork()创建一个新的子进程。
- 在子进程中使用exec()来执行新程序。
这种组合允许父进程继续执行原来的任务,而子进程则执行全新的程序。这是很多Unix/Linux程序的标准做法,比如shell在执行命令时就是这样操作。