进程初识 —僵尸进程 、环境变量

进程初识

 1.查看进程

ps -aux;ps -ef

查看进程信息ps -aux | grep loop

pid_t getpid(void)

将这个函数运行到要查看的程序中,她的返回值就是进程id号

/proc

在/proc/目录下全是以进程号为名称的文件夹

获取调用进程的函数int getpid(void)

创建一个?新的子进程fork

 

 

2.Linux下的进程状态

 

 

运行R

R(run)

处于激活状态

能直接被kill

可中断的休眠

S(interpret sleep)

可以被一般的指令激活

能直接被kill

不可中断的休眠

D(disk sleep)

一般不会被激活

不能kill

停止

T(Timinal)

在T 状态下是不会被杀死的

kill了,杀不掉,但是激活之后,就会执行到kill

僵死

Z()

进程退出了,但是资源没有被完全释放

子进程先于父进程退出

前台进程

S+,D+

有+号

后台程序就没有+

kill -l        查看kill 的功能

kill -9        强制杀死进程

kill -18       让杀死的进程继续运行

僵尸进程

 

    子进程杀不死  [kill -9],没用-Z          ----导致资源泄露

资源泄露

    子进程先于父进程退出(kill了子进程),因为要保留退出原因,操作系统不能直接释放资源,要去通知父进程获取退出原因。而父进程没有关注这个通知,所以操作系统一直不去释放这部分资源,所以这个杀死的子进程就成了僵尸进程,不工作到时占资源

  1.   如何避免:进程等待

           退出父进程可以避免

 

.孤儿进程

                 父进程先于子进程退出(kill了父进程),子进程成了孤儿进程,运行在后台   她的父进程变成   1  号进程 

守护进程/精灵进程   特殊的孤儿进程  脱离终端和会话影响                          

操作系统中  1(systemd) 就是守护进程   操作系统中是  d 结尾的文件

 

3.环境变量:存储系统运行参数的变量

 

删除一个环境变量

unset  mypath

声明或设置一个环境变量

export mypath(将一个普通的变量(当前shell中的变量)变成env中的变量)

三种查看环境变量的方法

env / set  / echo $PATH

查看环境变量   set是全部的变量

path的含义

指定可执行程序的默认搜索路径

添加环境变量

PATH=$PATH:/heme/python/bin这就将冒号后面的路径加到了PATH中

 

【注意】一定要加'$',

不加$,PATH=  PATH就相当于赋值,就会直接覆盖掉原来的所有PATH

char *ptr = getenv("PWD");  //h获取env中PWD的包含的字符串

环境的全局特性:

        shell终端下所运行的进程能够获取到所有到所有的环境变量,但是获取不到普通变量(普通变量只是这个shell程序 下的普通变量,换一个shell,这个普通变量是获取不到的)

 

代码中操作环境变量

3种方法

int main(int argc,char *argv[ ],char *env[ ])

main函数中的第三个变量

extern char **enviroon

全局变量

char *getenv(char *name)

putenv( )

setenv( )

三个函

 

 

 

 

 

你可能感兴趣的:(Linux,僵尸进程,资源泄露,环境变量)