Linux进程状态环境变量与僵尸进程 - Go语言中文社区

Linux进程状态环境变量与僵尸进程


进程状态

  • 进程基本的状态有5种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。很多时候我们也把进程状态分为三种,即运行态、就绪态、阻塞态。如图所示。
    在这里插入图片描述
  • Linux下进程状态

R (运行状态)
S (可终端睡眠态)
D (不可中断睡眠态)
T (停止态)
t (追踪态)
X(死亡状态)
Z (僵尸态/僵死态)

僵尸进程

  • 概念:处于僵死态的进程就是僵尸进程
  • 产生原因:子进程先于父进程退出,退出原因保存在PCB中,操作系统检测到子进程退出后,通知父进程,但是父进程可能在忙于其它事情,并没有关注子进程的退出,这时候操作系统也不能随意释放子进程的资源,因为父进程会关注子进程退出的原因,这就形成了子进程退出但是它的资源没有被操作系统完全释放掉的状态,我们就称这种状态为僵死态,而处于这种状态下的进程叫做僵尸进程。
  • 危害:它会造成资源泄露,如果僵尸进程过多则会造成不能创造新进程的情况
  • 如何解决:在此处,我们不可以使用kill命令,因为kill命令是用来终止进程的,而僵尸进程已经终止了,只是它所占用的资源没有被回收而已,那我们该如何解决僵尸进程呢?那么最直接的方法就是干掉它的父进程即可,那么它所保存的退出原因信息将毫无意义,因为父进程已经死了。

孤儿进程

  • 父进程先于子进程退出,子进程就变成了孤儿进程,后被Init(1号)进程收养,到后台运行。

环境变量

  • 概念:存有操作系统运行环境参数的变量

  • 常见环境变量
    PATH:可执行文件的搜索路径。ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls,然而通常我们执行当前目录下的程序a.out却需要提供完整的路径名./a.out,这是因为PATH环境变量的值里面包含了ls命令所在的目录/bin,却不包含a.out所在的目录。PATH环境变量的值可以包含多个目录,用:号隔开。在Shell中用echo命令可以查看这个环境变量的值:
    $ echo $PATH
    SHELL:当前Shell,它的值通常是/bin/bash。
    HOME:当前用户主目录的路径,很多程序需要在主目录下保存配置文件,使得每个用户在运行该程序时都有自己的一套配置。

  • 操作:
    env:查看所有的环境变量
    echo:查看指定的环境变量
    export:设置一个新的环境变量
    set:显示本地定义的shell变量和环境变量
    unset:删除环境变量

  • 相关函数
    getenv函数获取环境变量值
    char *getenv(const char *name); 成功:返回环境变量的值;失败:NULL
    setenv函数设置环境变量的值
    int setenv(const char *name, const char *value, int overwrite); 成功:0;失 败:-1
    参数overwrite取值: 1:覆盖原环境变量
    0:不覆盖。(该参数常用于设置新环境变量,如:ABC = haha-day-night)
    unsetenv函数
    删除环境变量name的定义
    int unsetenv(const char *name); 成功:0;失败:-1
    注意事项:name不存在仍返回0(成功),当name命名为"ABC="时则会出错。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43503315/article/details/88959263
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢