我的计算机中出现了几个僵尸进程。我该如何清除它们?
事实上,为什么会存在 vlc 和 pidgin 僵尸?这是 Ubuntu 的一个错误还是我做了什么?
谢谢!
ps aux |grep Z
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
sammy 3236 0.0 0.0 0 0 ? Zl heinä26 0:01 [vlc] <defunct>
sammy 4028 0.0 0.0 0 0 ? Zl heinä26 0:00 [vlc] <defunct>
sammy 4046 0.0 0.0 0 0 ? Zl heinä26 0:00 [vlc] <defunct>
sammy 4060 0.0 0.0 0 0 ? Zl heinä26 0:00 [vlc] <defunct>
sammy 4841 0.0 0.0 0 0 ? Z heinä26 0:00 [pidgin] <defunct>
sammy 4844 0.0 0.0 0 0 ? Z heinä26 0:00 [pidgin] <defunct>
sammy 6525 0.0 0.0 0 0 ? Z heinä26 0:00 [pidgin] <defunct>
sammy 6529 0.0 0.0 0 0 ? Z heinä26 0:00 [pidgin] <defunct>
sammy 8401 0.0 0.0 0 0 ? Zl heinä26 0:00 [vlc] <defunct>
sammy 13526 0.0 0.0 0 0 ? Z 09:54 0:00 [pidgin] <defunct>
答案1
如果您有僵尸进程,则意味着这些僵尸进程的父进程没有等待(查看 显示的 PPID
ps -l
)。您有三个选择:修复父进程(使其等待);终止父进程;或忍受它。请记住,忍受它并不难,因为僵尸进程在 的输出中只占用一行多一点的内容ps
。[...]僵尸程序存在的时间过短通常表明父程序中存在错误。与其他泄漏一样,少量僵尸的存在本身并不令人担忧,但可能预示着问题在更重的负载下会变得更加严重。
要从系统中移除僵尸进程,可以使用 kill 命令手动向父进程发送 SIGCHLD 信号。如果父进程仍然拒绝收割僵尸进程,下一步就是移除父进程。当进程失去父进程时,init 将成为其新的父进程。Init 会定期执行 wait 系统调用来收割以 init 为父进程的任何僵尸进程。
也可以看看这个帖子关于如何摆脱僵尸进程。
答案2
至少对于 pidgin 来说,这似乎是一个由于进入和退出休眠状态的问题而导致的错误:
https://bugs.launchpad.net/ubuntu/+source/pidgin/+bug/1245666
vlc 僵尸可能只是由于该程序中的错误而导致的巧合。
答案3
对于我来说,每次我打开一个新视频(从文件资源管理器中)时,都会创建一个新的(或某些)进程并以某种方式保持“活动”(至少在“任务栏”上会出现一个图标)。
我看到一个建议(抱歉不记得作者了)将视频输出更改为 OpenGl,但这不起作用。无论如何,当我将视频输出更改为 XBC 时,它起作用了。问题出现在 snap 和 apt 的 VLC 上。
我的解决方案:
- 关闭/终止所有“活动”进程(kill -9 vlc)
rm -r ~/.config/vlc
- 单独运行 vlc ($vlc)
- 工具 > 首选项 > 视频 > 输出 XCB > 保存
我将两个输出(输出和全屏输出)都更改为 XCB。