进程替换
(1)exec 系列替换过程:pcb 使用以前的只修改,进程实体更换。
1. #include <unistd.h>
2. exec 系类方法介绍以 execl 为例:
3. /*
4. *path:新替换的程序的路径名称
5. *arg :传给新程序主函数的第一个参数,一般为程序的名字
6. *arg 后面是剩余参数列表,参数个数可变,必须以空指针作为最后一个参数
7. */
8. int execl(const char* path, const char * arg,...);
9. int execlp(const char* file, const char * arg,...);
10. int execle(const char* path, const char * arg,...,char* const envp[]);
11. int execv(const char * path, char* const argv[]);
12. int execvp(const char * file, char* const argv[]);
13. int execve(const char * path, char* const argv[],char* const envp[]);
(2)以 ps 替换当前程序为例,介绍 exec 系统函数使用,注意该系列方法功能都一样,没有
区别,只是参数不同:
1.#include<stdio.h>
2.#include<stdlib.h>
3.#include<unistd.h>
4.
5.int main
6.{
7. printf("main pid=%d",getpid());
8. char*myargv[]={"ps","-f",0};
9. execve("/usr/bin/ps",myargv,envp);//envp:环境变量
10. //execvp("ps",myargv);//ececvp:系统调用
11. //execv("/usr/bin/ps",myargv);
12. //execle("/usr/bin/ps","ps","-f",(char *)0,envp);
13. //execlp("ps","ps","-f",(char *)0);
14. // execl("/usr/bin/ps","ps","-f",(char *)0);
15. printf("execl err\n");
16. exit(0);
17.}
创建环境变量
创建(增加)环境变量:
首先,定义本地变量
然后,再把它换成环境变量
最后,也可以把它撤销环境变量
申请内存空间
申请malloc,1G内存能否成功?
1 物理内存剩余空间大于1G,能成功;
2 物理内存剩余空间不足1G,但是加上虚拟内存的空闲空间,大于1G,那么也能成功。
1.#include<stdio.h>
2.#include<stdlib.h>
3.#include<string.h>
4.#include<unistd.h>
5.
6.int main
7.{
8. (char*) s= (char*) malloc (1024*1024*1024);//物理内存2G,虚拟内存2G的情况下。申请2G可以,物理内存不够,可以使用虚拟内存。申请3G不可以,可以申请的内存不够。
9. if (s == NULL)
10.{
11. printf("malloc failed\n");
12. exit(1);
13. }
14. memset(s,0,1024 *1024 *1024);
15. exit(0);
16.}
这种情况下,申请3G不可以,可以申请的内存不够。(内核最大不能超过1G,用户不能超过3G)