通过execve在两个进程间传递环境变量
2016-12-14 13:21
330 查看
进程1:execve
进程2:hello
execve.h 的代码如下:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
hello.c的代码:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
单独执行hello进程的时候,会打印出系统的环境变量
通过在execve进程里调用execve函数可以调用子进程hello,并自定义环境变量,execve进程最后那个打印操作并不会再执行
总结:
execv 的环境变量 是environ的 值,也就是系统的环境变量
而execve 能设置自己的环境变量
如果是execve 传递args,则设置
进程2:hello
execve.h 的代码如下:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> /* #include <unistd.h> execve是系统调用,下面的函数是execve的库函数 extern char **environ; 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 main(void) { printf("pid: %d\n", getpid()); // 自定义的环境变量参数列表---> 其实就是一个指针数组 char * const envp[] = {"aaa=111", "bbb=222", NULL}; execve("./hello", NULL, const); printf("hello...\n"); return 0; }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
hello.c的代码:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> // environ:环境变量 ===== 指针数组 extern char **environ; int main(void) { int i = 0; printf("hello_pid: %d\n", getpid()); for (i = 0; environ[i] != NULL; i++) { printf("%s\n", environ[i]); } return 0; }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
单独执行hello进程的时候,会打印出系统的环境变量
通过在execve进程里调用execve函数可以调用子进程hello,并自定义环境变量,execve进程最后那个打印操作并不会再执行
总结:
execv 的环境变量 是environ的 值,也就是系统的环境变量
而execve 能设置自己的环境变量
如果是execve 传递args,则设置
#include <stdio.h> #include <unistd.h> char **__environ={"PATH=/bin", 0}; int main(int argc, char **argv) { if (argc < 2) return -1; int pid=fork(); if(pid < 0) exit(EXIT_FAILURE); else if(pid == 0) { char *cmdline[] = {"/usr/bin/curl","-O","http://www.cloudidea.cn/lv_demo/upload/video/zhou2.mp4", NULL}; //****重要 execve(argv[1], cmdline, __environ); exit(EXIT_FAILURE); printf("son============\n"); } waitpid(-1,NULL,0); printf("over============\n"); return 0; }
相关文章推荐
- 通过execve在两个进程间传递环境变量
- 演示通过环境变量在不同进程间传递数据
- 通过环境变量传递参数给进程
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- QTP使用异步VBS进程并通过系统环境变量传值
- 如何让环境变量能够通过sudo传递进去。
- 通过环境变量设置将外部参数传递到qooxdoo应用系统内部
- 一劳永逸部署项目:通过tomcat加载环境变量
- 环境变量配置完毕,但是通过localhost或localhost:8080访问出现404
- 【linux草鞋应用编程系列】_2_ 环境变量和进程控制
- Docker 生产环境之配置守护进程 - 通过 Prometheus 收集 Docker 指标
- Day24、错误处理、使用C语言操作环境变量、进程映射、栈的原理(全局、静态变量)
- 进程之间通讯:M_COPYDATA消息来实现两个进程之间传递数据.
- Hadoop Streaming 实战: 传递环境变量
- 通过批处理(bat)来注册java环境变量
- windows下 两个版本的JDK环境变量进行切换
- c_指针_通过指针交换两个变量的值且不使用新变量
- Makefile(或者shell)的变量通过gcc的-D宏定义选项传递给C源文件
- 通过程序获取环境变量(ASCII版和Unicode版)
- 通过Spring Bean 注入static变量,来设计一套适合测试,开发,生产环境的配置项