进程替换
一、什么是进程替换
创建一个进程后,pid 以及在内核中的信息保持 保持不变,但进程所执行的代码进行替换
作用 : 通过一个进程启动另外一个进程
应用场景:
c++程序 进程替换启动python.exe
二、exec函数家族
在 Linux 系统中提供了一组用于进程替换的替换,共有6个函数
函数原型
int execl(const char *pathname, const char arg, … / (char *) NULL */);
int execlp(const char *file, const char arg, … / (char *) NULL */);
int execle(const char *pathname, const char arg, … /, (char *) NULL, char *const envp[] */);
int execv(const char *pathname, 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 <unistd.h>
#include <stdlib.h>int main(void){int ret = 0;// ret = execl("/bin/ls", "ls", "-l", NULL);ret = execl("/bin/ls", "ls", NULL);if (ret == -1) {perror("[ERROR] execl():");exit(EXIT_FAILURE);}printf("process end!\n");return 0;
}
+v是指输入参数加到一个数组里
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main(void){int ret = 0;char *const argv[] = {"ls", "-l", NULL};// ret = execv("./app", argv);ret = execvp("./app", argv);if (ret == -1) {perror("[ERROR] execl():");exit(EXIT_FAILURE);}return 0;
}