Linux僵尸进程

僵尸进程

        使用Linux快两年半了,前天是第一次遇到僵尸进程。
        在超算上使用hisat2进行比对时,为了图快速设置的是并行计算。在超算的7号计算节点进行。我使用的超算配置为一个管理节点,7个计算节点和一个gpu节点(做深度学习用)。一开始提交任务后也没管比对的事情了,后来在做完其他事情后在Winscp的界面段刷新了一下文件列表想看看比对完成没有,刷新后显示还没有比对完。我当时感觉是不是因为参考基因组太大了,比对的比较慢。又过了一段时间再刷新就发现不对劲了,怎么还是停留在这个文件下。那天晚上也没有多想,以为是设置的内存不够就关闭了。等第二天再重新做一下。于是乎,噩梦就这样开始了。
        第二天我理所当然地切换到7号计算节点进入昨天失败的路径下敲入了ls命令,出现了匪夷所思的事情

Linux僵尸进程

        奇怪,ls命令输入以后没有任何反应。
       当时的我没有任何僵尸进程的概念。也无法找到适合描述这个问题的关键词。登录超算界面检查7号计算节点工作状态,没有问题啊。

Linux僵尸进程

        不过,经过我的思考,我重新连上7号计算节点,进去其他路径输入

pstree

       

        通过观察进程树我发现我前天晚上失败的hisat2和今天失败ls命令都在进程中。于是我马上再输入

px axf

   

        这下我找到原因了,我发现我失败的命令对应的执行状态是Zl和D。知道了问题所在后我去百度搜索Linux进程状态Zl或者D。这下才明白,原来我失败的hisat2进程变成了僵尸进程。下面讲解一下什么是Linux中的进程状态

进程状态

        S (TASK_INTERRUPTIBLE),可中断的睡眠状态:处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。
   D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态:与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。否则你将惊奇的发现,kill -9竟然杀不死一个正在睡眠的进程了!于是我们也很好理解,为什么ps命令看到的进程几乎不会出现TASK_UNINTERRUPTIBLE状态,而总是TASK_INTERRUPTIBLE状态。
        Z:僵尸状态(zombie):在UNIX/Linux中,每个进程都有一个父进程,进程号叫PID(Process ID),相应地,父进程号就叫PPID(Parent PID)。当进程死亡时,它会自动关闭已打开的文件,舍弃已占用的内存、交换空间等等系统资源,然后向其父进程返回一个退出状态值,报告死讯。如果程序有 bug,就会在这最后一步出问题。儿子说我死了,老子却没听见,没有及时收棺入殓,儿子便成了僵尸。
        R:运行状态,代表进程此刻正在运行,当这个进程结束后通常会变成状态S。

解决方法

         了解了这些Linux状态概念后解决方法也有了,这样我也明白了我的进程到底是出了什么情况才这样。,用hisat2软件进行运算由于I/O资源得不到满足,导致了这个计算节点下该路径的该命令资源得不到满足,出现了僵尸状态Z,然后我关掉了终端却关不了进程,重新在有僵尸进程的目录下执行ls命令,由于僵尸状态如果执行完是要输出结果文件的,现在僵尸状态无法输出结果文件,然后导致了ls这些命令无法执行出现不可中断的等待状态D。所以要先终止僵尸进程才可以解决。解决僵尸进程的方法是先kill掉父进程,然后僵尸状态变为init再kill。不过不是所有的僵尸进程都能用kill -9 杀掉的,比如父进程是root用户的进程。很不幸,由于超算系统配置的问题,我的僵尸进程恰好是root进程。

ps -ef | grep hisat2 

        

        无奈之下我联系了管理员reboot。才解决了问题,不过当解决之后我继续用hisat2比对又出现了僵尸进程。所以这是因为软件问题(不太可能,不过我还是准备去github问问)还是系统配置问题?这次选了我最喜欢看的俄剧《劫后余生》作为封面,这个剧非常好看,如果解决不了僵尸进程还是去看看这个剧吧~

Linux僵尸进程》来自互联网公开内容,收录仅供学习使用,如侵权请联系删除。本文URL:https://www.ezixuan.com/1020646.html

(0)
上一篇 2023年 1月 28日 上午9:04
下一篇 2023年 1月 28日 上午9:04