开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散

如不雅你经常应用 Linux,你应当碰到这个术语“僵尸过程”。 那么什么是僵尸过程? 它们是怎么产生的? 它们是否对体系有害? 我要如何杀掉履┞封些过程? 下面将会答复这些问题。
什么是僵尸过程?
不过很多法度榜样写的不是那么好,无法删掉履┞封些子僵尸(不然你一开端也见不到这些僵尸了)。 是以确保删除子僵尸的独一办法就是杀掉落它们的父过程。
我们都知道过程的工作道理。我们启动一个法度榜样,开端我们的义务,然后等义务停止了,我们就停止这个过程。 过程停止后, 该过程就会大年夜过程表中移除。
你可以经由过程 System-Monitor 查看当前过程。

然则,有时刻有些法度榜样即使履行完了也依然留在过程表中。
那么,这些完成了生命周期但却依然留在过程表中的过程,我们称之为 “僵尸过程”。
它们是若何产生的?
当你运行一个法度榜样时,它会产生一个父过程以及很多子过程。 所有这些子过程都邑消费内核分派给它们的内存和 CPU 资本。
若父过程精确第攫取了子过程的 Exit 旌旗灯号,则子过程会大年夜过程表中删掉落。
这些子过程完成履行后会发送一个 Exit 旌旗灯号然后逝世掉落。这个 Exit 旌旗灯号须要被父过程所攫取。父过程须要随后调用 wait 敕令来攫取子过程的退出状况,并将子过程大年夜过程表中移除。
但若父过程未能攫取到子过程的 Exit 旌旗灯号,则这个子过程固然完成履行处于逝世亡的状况,但也不会大年夜过程表中删掉落。
僵尸过程对体系有害吗?
不会。因为僵尸过程并不做任何工作, 不会应用任何资本也不会影响其它过程, 是以存在僵尸过程也没什么坏处。 不过因为过程表中的退出状况以及其它一些过程信息也是存储在内存中的,是以存在太多僵尸过程有时也会是一些问题。
你可以想象成如许:
“你是一家建筑公司的老板。你天天根据工人们的工作量来付出工资。 有一个工人天天来到施工现场,就坐在那边, 你不消付钱, 他也不做任何工作。 他只是天天都来然后呆坐在那,仅此罢了!”
这个工人就是僵尸过程的一个活生生的例子。然则, 如不雅你有很多僵尸工人, 你的扶植工地就会很拥堵大年夜而让那些正常的工人难以工作。
那么若何找出僵尸过程呢?
打开终端并输入下面敕令:
ps aux | grep Z
会列出过程表中所有僵尸过程的具体内容。
若何杀掉落僵尸过程?
正常情况下我们可以用 SIGKILL 旌旗灯号来杀逝世过程,然则僵尸过程已经逝世了, 你不克不及杀逝世已经逝世掉落的器械。 是以你须要输入的敕令应当是
kill -s SIGCHLD pid
将这里的 pid 调换成父过程的过程 id,如许父过程就会删除所有以及完成并逝世掉落的子过程了。
你可以把它想象成:
"你在门路中心发明一具尸首,于是你接洽了逝世者的家眷,随后他们就会将尸首带离门路了。"
【编辑推荐】
- 如安在Linux上安装Google Chrome 63
- Linux上若何禁用USB存储设备
- 慕尼黑放弃Linux的三大年夜原因
- 到底该若何懂得Unix/Linux的文件体系?看这篇就知道了
- 成为Linux终端高手的七种兵器
推荐阅读
JavaScript开发者:最喜欢React,Vue.js比Angular更值得尝试 | 2017 JS调查报告
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 State Of JavaScript 2017 查询拜访结不雅已经出炉。作者对浩瀚 JavaScript 开辟者进行了查询拜访,以懂得如今前端开辟者对前端各>>>详细阅读
本文标题:什么是僵尸进程,如何找到并杀掉僵尸进程?
地址:http://www.17bianji.com/lsqh/39796.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示