exec函数族:
作用:可以在一个程序中启动另外一个功能,用新的进程段替换当前进程的段.
exec函数族用于替换当前进程的映像,允许程序在运行时加载并执行新的程序代码。
execl:
l:list path:要执行的文件的路径 arg:要执行的文件的参数,以NULL结尾。
execl("/bin/cp","cp","1.txt","5.txt",NULL);
execv
v:指针数组 path:要执行的文件的路径 arg:要执行的文件放入一个数组,传数组名
execv("/bin/cp",arg);
execlp:
l:list 除了第一个参数与上述不一样之外,其他参数都相同。不需要写入文件路径,只需要传入可执行文件的文件名,可执行文件必须在/bin目录中。
execlp("cp","cp","1.txt","5.txt",NULL);
execvp
execvpe
e:可以给要执行的程序传递一个环境变量。
execvle
进程的结束
1.正常结束:
1)return 0;
2)exit;C库函数。函数调用时,会调atexit函数。
造成正常的进程结束;库函数 刷新缓冲区
atexit 退出处理函数 需要注册
a. main返回 b. exit()
c.最终调用顺序与注册顺序相反 d.函数可以多次注册。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int *q = NULL;
void cleanup1(void)
{
free(q);
printf("----cleanup 1---\n");
}
void cleanup2(void)
{
printf("----cleanup 2---\n");
}
int main(int argc, const char *argv[])
{
atexit(cleanup1);
atexit(cleanup2);
int *p = malloc(4);
q = p;
*p = 4;
printf("*p = %d\n",*p);
printf("hello world!\n");
//_exit(0);
//_exit(0);
return 0;
}
3)_exit;
函数调用时,不会调到atexit函数
2.异常终止:
absort()
signal;