首先要知道的是,进程是资源分配的最小单位,线程是资源调度的最小单位。PCB为进程控制块。
一、进程
1.创建新(子)进程函数
pid_t fork(void);
//该函数执行成功之后,在新的子进程中其返 回值为 0 ,在原来的父进程中其返回值为大于 0 的正整数,该正整数就 是子进程的 PID
特点:
1).会使得进程本身被完全复制,两个进程一模一样
2). 进程号 PID不一致
3).子进程会从 fork( )返回值后的下一条逻辑语句开始运行
4).父子进程是相互独立的
2.覆盖原有文件代码,重新运行函数
int execl(const char *path, const char *arg, ...);
int execv(const char *path, char *const argv[ ]);
int execlp(const char *file, const char *arg, ...);
path :即将被加载执行的 ELF 文件或脚本的路径
file :即将被加载执行的 ELF 文件或脚本的名字
arg :以列表方式罗列的 ELF 文件或脚本的参数
argv :以数组方式组织的 ELF 文件或脚本的参数
envp:用户自定义的环境变量数组
注意:
1).函数名带字母 l 意味着其参数以列表 (list) 的方式提供。
2).函数名带字母 v 意味着其参数以矢量 (vector ) 数组的方式提供。
3).函数名带字母 p 意味着会利用环境变量 PATH 来找寻指定的执行文件。
4).函数名带字母 e 意味着用户提供自定义的环境变量。
3.退出函数
void _exit(int status);
void exit(int status);
status:子进程的退出值
注意:
1.如果子进程正常退出,则 status 一般为 0。
2.如果子进程异常退出,则 statuc 一般为非 0。
3.exit( )退出时,会自动冲洗 (flush) 标准 I