目录
程序替换(也称为程序加载或程序执行)是指将一个程序从磁盘(或其他存储介质)中读取到内存中,然后用它来替换当前正在运行的进程的代码和数据。
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
四、环境变量
- 当我们进行程序替换的时候,子进程对应的环境变量,是可以直接从父进程来的
- 环境变量被子进程继承下去是一种默认行为,不受程序替换的影响,为什么?
通过地址空间可以让子进程继承父进程的环境变量数据
程序替换,只替换新程序的代码和数据,环境变量不会被替换!!!
-
相关阅读:
Hyperf微服务搭建
中小企业数字化转型的三条建议
去耦电路设计应用指南(二)电容的噪声抑制
干货!基于GAN的稀有样本生成
Redis概述与安装
微盟十年:踩准节奏,持续增长
mybatis的SqlSession
ASP.NET Core IOC容器
Web3.0代币将如何颠覆传统内容创作模式?
人工智能与神经网络-激活函数
-
原文地址:https://blog.csdn.net/m0_63783532/article/details/134280944