1、孤儿进程
1)产生原因
顾名思义,父进程先于子进程退出,子进程就变成了孤儿进程。
对比僵尸进程讨论一下他们俩的异同:
不同之处 相同之处 孤儿进程 父进程先于子进程退出,子进程就变成了孤儿进程 讨论的对象都是子进程 僵尸进程 子进程先于父进程退出,子进程就会变成僵尸进程
2)代码模拟
1 #include<stdio.h> 2 #include<unistd.h> 3 int main() 4 { 5 pid_t ret=fork(); 6 if(ret<0) 7 { 8 return 0; 9 }else if(ret==0) 10 { 11 //child 12 while(1) 13 { 14 printf("i am child process,pid=%d,ppid=%d\n",getpid(),getppid()); 15 sleep(1); 16 } 17 }else 18 { 19 //father 20 printf("i am child process,pid=%d,ppid=%d\n",getpid(),getppid()); 21 } 22 return 0; 23 }运行结果如下:
这样的话孤儿进程就被我们创造出来了,大家可以看到第一组父子进程的pid与ppid都是有着关联的,子进程的ppid就是父进程的pid;
父进程先退出之后,子进程没有了father,便自动归到了1号进程的麾下。
3)孤儿进程的退出信息由谁回收
1号进程:操作系统的init进程,操作系统很多进程都是由该进程创建出来的,孤儿进程的父进程变为1号进程就意味着该孤儿进程退出的时候,退出的状态信息由1号进程进行回收。
4)孤儿进程有危害吗?
孤儿进程没有任何危害,退出状态信息会被一号进程进行回收;
只有孤儿进程,没有孤儿状态!!
2、环境变量
1)什么是环境变量
环境变量:是指在操作系统中用来指定操作系统运行的一些参数;换句话说,操作系统通过环境变量来找到运行时的一些资源。
比如说:链接的时候,帮助链接器找到动态库(标准库的);
执行命令的时候,帮助用户找到该命令在哪一个位置(例如ls)。
2)常见的一些环境变量
1、PATH:指定可执行程序的搜索路径,程序员执行的命令之所以能找到,全靠PATH变量;
2、HOME:登录到Linux操作系统的用户家目录;
3、SHELL:当前的命令解释器,默认是"/bin/bash",命令解释器本质上也是一个可执行程序,运行起来也是一个进程。
3)查看当前环境变量
1、env
显示: 环境变量名称=环境变量的值(使用' : '进行间隔)
示例:
2、echo $[环境变量名称]
可以查看单个环境变量对应的值
示例:
4)环境变量对应的文件
1、系统级文件:针对各个用户都起作用(root用户可修改),强烈不推荐修改系统的环境变量文件,因为会影响其他用户;
2、用户级别环境变量文件:推荐大家修改这个文件,对自己用户的环境变量做出改变,只影响自己。
5)修改环境变量
命令范式:export 环境变量名称=[$环境变量名称] : [新添加的环境变量的内容]
1、命令行中直接修改:(特点:临时生效)如果是新增,可以不要[$环境变量名称],即export 环境变量名称=[新添加的环境变量的内容];如果修改老的,必须加上[$环境变量名称],否则之前的环境变量的值就找不到了。
2、文件当中修改:(特点:修改完毕之后不会立即生效,需要配合 source [环境变量文件名称])如果是新增,则在文件末尾直接添加:export 环境变量=[新添加的环境变量的内容];如果修改老的,在老的后面添加“ : [新添加的环境变量的内容]”。
6)环境变量的组织方式
环境变量是以字符指针数组的方式进行存储的,最后的元素以NULL结尾(当程序拿到环境变量的时候,读取到NULL,就代表着读取完毕)
7)代码获取环境变量
1、main函数的参数
int main(int argc,char* argv[],char* enc[])
#include<stdio.h> /* * 命令行参数的 * 1、命令行参数的个数 * 2、命令行参数的值 * * 3、环境变量*/ int main(int argc,char* argv[],char* env[]) { for(int i=0;env[i]!=NULL;i++) { printf("====[%s]\n",env[i]); } return 0; }2、environ
environ char **environ:全局的外部变量,在C#的标准库当中定义的,使用时需要用extren关键字。
#include<stdio.h> int main() { extern char** environ; for(int i=0;environ[i]!=NULL;i++) { printf("====[%s]\n",env[i]); } return 0; }3、getenv
#include<stdio.h> #include<stdlib.h> int main() { printf("====PATH=%s\n",getenv("PATH")); return 0; }
8)将可执行程序的路径设置到PATH环境变量,可以省去“./”
为什么执行程序要加上“./”呢,以为要告诉命令行参数bash要执行的程序在当前路径下。


2、文件当中修改:(特点:修改完毕之后不会立即生效,需要配合 source [环境变量文件名称])如果是新增,则在文件末尾直接添加:export 环境变量=[新添加的环境变量的内容];如果修改老的,在老的后面添加“ : [新添加的环境变量的内容]”。
1544

被折叠的 条评论
为什么被折叠?



