1.system
#include<stdlib.h>
int system(const char *command);
comand是命令的路径,一般我们用绝对路径
system函数会创建新的进程,新的进程执行完返回原来的进程,原来的进程则继续执行后面的代码段。
如我们创建一个sys.cpp文件,在其中去执行另一个sys1可执行文件
#include<iostream>
#include<unistd.h>
#include<stdlib.h>
int main()
{
std::cout<<"sys excute"<<getpid()<<std::endl;
system("./sys1");
std::cout<<"sys success"<<std::endl;
return 0;
}
同目录下创建一个sys1.cpp文件,然后将其编译链接为可执行文件
#include<iostream>
#include<unistd.h>
int main()
{
std::cout<<"sys1 excute"<<getpid()<<std::endl;
std::cout<<"sys1 termined"<<std::endl;
return 0;
}
可以看出先执行完sys1后又返回原来的进程执行了
2.execl
#include <unistd.h>
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[]);
一般来说,path为指令的路径,arg为指令的参数
excel不创建新的进程,只是从原来进程去执行别的任务,执行完不会返回。
#include<iostream>
#include<unistd.h>
#include<stdlib.h>
int main()
{
std::cout<<"sys excute"<<getpid()<<std::endl;
execl("./sys1","sys1",0);
std::cout<<"sys success"<<std::endl;
return 0;
}
可以看到执行完sys1,就结束了