fork和exec函数
#include <unistd.h>
pid_t fork(void);
返回:在子进程中为0,在父进程为子进程ID,若出错则为-1
fork在调用进程(父进程)中返回一次,返回值是新派生进程(子进程)的进程ID号;
在子进程又返回一次,返回值为0;因此,返回值本身告知当前进程是子进程还是父进程。
fork在子进程返回0而不是返回父进程ID的原因在于:任何子进程只有一个父进程,而且子进程中是可以通过调用getppid函数取得父进程的进程ID。相反,父进程可以有许多的子进程,而且无法获取各个子进程的进程ID。如果想要追踪所有的子进程的进程ID,那么它必须记录每次调用fork的返回值。
fork有两个典型用法。
(1)一个进程创建一个自身的副本,这样每个副本都可以在另一个副本执行其他任务的同时处理各自的操作。
(2)一个进程想要执行另一个程序,既然要创建进程的唯一方法是调用fork函数,该进程于是首先调用fork创建一个自身的副本,然后其中的一个副本调用exec把自身替换成新的程序。
六个exec函数之间的区别在于:
(a)待执行的程序文件是由文件名(filename)还是路径名(pathname)指定;
(b)新程序的参数是一一列出还是由一个指针数组来引用;
(c) 把调用进程的环境传递给新程序制定的环境。
一般只有execve是内核中的系统调用,其他五个都是调用execve的库函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理