目录
程序替换(也称为程序加载或程序执行)是指将一个程序从磁盘(或其他存储介质)中读取到内存中,然后用它来替换当前正在运行的进程的代码和数据。
man excel //命令查看
- #include
` - 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[]);
- man execl
- man execve
int execl(const char *path, const char *arg, ...);
- #include
- #include
//execl的头文件 - int main()
- {
- pid_t id = fork();
- if(id == 0)
- {
- printf("pid: %d, exec command begin\n",getpid());
- sleep(2);
- execl("/usr/bin/ls","ls","-a","-l","-n",NULL); //最后必须以NULL结尾
- printf("pid: %d, exec command end\n",getpid());
- }
- else{
- //父进程
- pid_t rid = waitpid(-1, NULL, 0);
- if(rid > 0)
- {
- printf("wait success, rid: %d\n", rid);
- }
- else if(rid == 0)
- {
- printf("child is alive, wait again, father do other thing....\n");
- }
- else{
- printf("wait failed!\n");
- }
- }
- return 0;
- }
int execv(const char *path, char *const argv[]);
- #include
- #include
//exec的头文件 - #include
//exit的头文件 - int main()
- {
- pid_t id =fork();
- if(id == 0)
- {
- //子进程
- char *const argv[]={"ls","-a","-l",NULL};
- printf("pid: %d, exec command begin\n",getpid());
- execv("/usr/bin/ls",argv);
- printf("pid: %d, exec command end\n",getpid());
- exit(1);
- }
-
- return 0;
- }
int execle(const char *path, const char *arg, ...,char *const envp[]);
envp
参数是一个指向字符串数组的指针,表示新程序的环境变量。这个数组以NULL结尾- #include
- #include
//exec的头文件 - #include
//exit的头文件 - #include
- int main()
- {
- char* const myenv[]={
- "MYVAL1=111111",
- "MYVAL2=222222",
- "MYVAL3=333333",
- NULL
- };
- pid_t id =fork();
- if(id == 0)
- {
- //子进程
- printf("pid: %d, exec command begin\n",getpid());
- execle("./test","test","-a","-b",NULL,myenv);
- printf("pid: %d, exec command end\n",getpid());
- exit(1);
- }
- return 0;
- }
- #include
- using namespace std;
- int main(int argc, char *argv[],char *env[])
- {
- cout<
- for(int i=0;env[i];i++ )
- {
- cout<" : "<
- }
- return 0;
- }
- makefile文件
- .PHONY:all
- all:test process
-
- test:test.cc
- g++ -o $@ $^ -std=c++11
- process:process.c
- gcc -o $@ $^ -std=c99
-
- .PHONY:clean
- clean:
- rm -f process test
四、环境变量
- 当我们进行程序替换的时候,子进程对应的环境变量,是可以直接从父进程来的
- 环境变量被子进程继承下去是一种默认行为,不受程序替换的影响,为什么?
通过地址空间可以让子进程继承父进程的环境变量数据
程序替换,只替换新程序的代码和数据,环境变量不会被替换!!!
-
相关阅读:
Python——函数
软件设计包括了四个既独立又相互联系的活动
bootstrapjs开发环境搭建
Java中的数组,你知道多少细节?
【MySQL】【牛客-SQL进阶挑战】03 聚合分组查询
H01-基于深度学习的物体检测-概述
MobileViT论文记录
【C语言】扫雷----详解(扩展版)
Web安全之浅见
Hive 中常用的函数以及数据类型
-
原文地址:https://blog.csdn.net/m0_63783532/article/details/134280944