当我运行Zotero / Firefox时,它们经常崩溃,并且我留下了僵尸进程。之后,我无法打开Zotero或Firefox的新实例。我想摆脱这些僵尸进程而不是重新启动,因此对于<pid>
僵尸进程,
$ ps -p <pid> -o ppid=
给我<parent_pid>
和
ps aux | awk -v PID=<parent_pid> '$2 == PID {print $0}'
告诉我父进程是/sbin/launchd
针对user的crippledlambda
。
有没有办法在不终止我的系统的情况下重新启动它?
sudo kill -1 <parent_pid>
什么也没做。我试过用脚本编写此代码并使用来运行它sudo
:
for i in `launchctl list | grep launchd | awk -v PID=<parent_pid> '$1==PID { print $NF }'`; do `launchctl stop $i && launchctl start $i` ; done
而这显然使我的屏幕无响应,因此无论如何我都必须重新启动。预先感谢您的建议。
为什么您要杀死启动而不是剩余进程本身?启动是用户会话的核心部分;即使您可以重新启动它,新实例也不是它负责的所有其他进程的父级……Finder,Dock等之类的东西
—
Gordon Davisson 2013年
@戈登,你不能杀死僵尸进程,所以除非我错过了什么,否则你必须去追捕父母。
—
hatmatrix
它们是真正的僵尸(即已退出但尚未读取其退出状态的进程)吗?如果它们是,那么更深层次的事情是错误的,因为
—
Gordon Davisson
launchd
应该始终立即读取其子级的退出状态。如果它们不是真正的僵尸,那么您应该杀死它们。在任何一种情况下,杀戮launchd
都会带来比解决方案更多的问题。