注意点:
- 调用
exec的进程会完全被新的程序替代,从新程序的main开始执行 - process ID保持保持原来的值,因为没有创建新的进程
exec替换了当前进程的text,data,heap,stacksegments
fork和exec的区别
fork创建新的进程
exec初始化新的程序
process control primitives有哪些
fork,exec,exit,wait
execl, execlp, execle, execv, execvp, execvpe - execute a file
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execve(const char *filename, char *const argv[],
char *const envp[]);//system call
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
//Reurns: -1 on error, no return on success
参数解释
file和path
- 如果
file包含\(slash),其将被看作pathname - 否则,可执行文件在
PATH环境变量指定的目录中搜索
envp
传入environment list
其余的函数在调用的进程里使用全局变量environ给新的程序复制已存在的环境。
exec family注意点:
- 如果
execlp或execvp通过路径找到的文件不是可执行文件,那么会认为该文件是shell script(脚本)文件,然后将其输入到shell中 - 函数名中
l代表是list,v代表是vector,如:execl,execlp,execle需要命令行参数是独立的参数,我们将该argument以NULL结尾。 p表示使用filename参数和PATH环境变量来查找文件e表示使用environment list
argument list和enviroment list的总大小限制
- 为
ARG_MAX - 我们可以使用
xargs(1)打破long argument lists
close-on-exec
每个文件描述符都有close-on-exec flag,如果该flag被设置,文件描述符通过exec关闭,否则保持开启。
open directory streams调用exec后被关闭
因为opendir就调用了fcntl设置了close-on-execflag
执行exec后从调用者进程的属性
• Process ID and parent process ID
• Real user ID and real group ID
• Supplementary group IDs
• Process group ID
• Session ID
• Controlling terminal
• Time left until alarm clock
• Current working directory
• Root directory
• File mode creation mask
• File locks
• Process signal mask
• Pending signals
• Resource limits
• Nice value (on XSI-conformant systems; see Section 8.16)
• Values for tms_utime, tms_stime, tms_cutime, and tms_cstime
effective IDs
real IDs保持不变,effective IDs取决于被执行的程序文件的set-user-ID和set-group-ID位。如果被设置,effective IDs会变成该程序文件的owner IDs
execve是唯一的系统调用
其余函数都是最终执行了该系统调用
下图演示exec家族的关系:
本文详细解析了exec函数族的工作原理及其与fork的区别,包括如何使用exec替换当前进程的执行上下文,以及不同exec函数之间的差异。同时,还介绍了与exec相关的注意事项,如文件描述符的行为、进程属性的变化等。
3277

被折叠的 条评论
为什么被折叠?



