子进程往往要调用一种exec函数以执行另一个程序。

因为调用exec并不创建新进程,所以前后进程ID并未改变。exec只是用磁盘上的一个新程序替换了当前进程的正文段、数据段、堆段、栈段。

#include <unistd.h>

int execl(const char *pathname, const char *arg0,... /* (char*)0*/);
int execv(const char *pathname, char *const argv[]);
int execle(const char *pathname, const char *arg0,... /* (char *)0, char *const envp[] */);

在很多UNIX实现中,这7个函数中只有execve是内核的系统调用。另外6个只是库函数,它们最终都要调用该系统调用。

results matching ""

    No results matching ""