exec函数族
一般在使用过程中,通常通过fork创建一个新的进程都是为了立即执行新的、不同的程序,通过调用exec函数族创建新的地址空间,并载入新的程序。
最终通过exit()系统调用退出执行,提到这个函数可以想到与之相近的几个函数,如下:
- exit() 终结当前进程并将其所占用的资源释放掉。
- _exit()和_Exit()终结当前进程但不会释放所占用的资源。
- return 结束当前函数,并且带出返回值。
exec函数族的原型如下:
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,...,char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);
以上函数简单可以理解为使用一个新的进程来替换掉当前的进程。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/*
*打印时戳 date+%s
*/
int main(int argc, char *argv[])
{
puts("begin");
fflush(NULL); //刷新缓冲区
//date命令通过which可查到其位置在/bin/date下
//参数1:新进程路径
//参数2:新进程的名字
//参数3:选项,所有选项必须以NULL结尾
if(execl("/bin/date","date","+%s",NULL) < 0)
{
perror("execl()");
exit(0);
}
puts("End");
return 0;
}
其他函数用法与以上函数的用法差不多,就不在这里赘述了。