#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
int fd;
fd = open("ps.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
if(fd < 0){
perror("open file");
exit(1);
}
//dup2(3,1)
dup2(fd,STDOUT_FILENO);
execlp("ps","ps","aux",NULL);
//此时,后续代码不会执行,在exec调用完成后此进程结束
//close(fd);
return 0;
}
exec的注意点:
/*
* exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。
与一般情况不同,exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,颇有些神似"三十六计"中的"金蝉脱壳"。看上去还是旧的躯壳,却已经注入了新的灵魂。只有调用失败了,它们才会返回一个-1,从原程序的调用点接着往下执行。
我们应该明白了,Linux下是如何执行新程序的,每当有进程认为自己不能为系统