进程1:execve
进程2:hello
execve.h 的代码如下:
- 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的代码:
- 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; }