我找不到终止后台while
循环的方法。
我在无限循环中启动了一个Perl脚本(即while true; do perl abc.pl; done
),终端会话断开了。
现在我正在尝试终止该循环。
如果我ps -aux | grep perl
,我看到Perl脚本正在运行。
如果我kill -9 <process id>
,它会一直显示不同的进程ID。
我该如何终止它?
我找到的唯一解决方法是重命名我的脚本,然后停止。
答案 0 :(得分:2)
可能发生的事情是你正在杀死perl程序,但抛出它们的循环仍在运行。您需要终止整个登录树。
ps -f -u $ USER (或类似的东西,取决于操作系统)显示进程ID,父进程ID和进程的tty。
将进程和父进程一直杀死进程树,直到运行循环的不需要的shell。注意违规过程的tty ...如果与你当前的tty不同,就会杀死那个tty上的所有进程;你可能需要一个新的终端窗口来获得不同的tty。
备用:Linux有 ps xjf 以树格式显示进程...从相关的shell进程开始并杀死该进程和所有子进程。
额外信息:在kill -9下不会消失的进程,保持相同的PID(不是你的条件),可能是“僵尸”进程正在等待其父进程读取其退出状态。僵尸实际上已经停止并且已经离开并且不活着所以你无法杀死他们。只有一个重影仍留在进程表中,等待父进程读取挂起的退出状态。杀死父级会将进程重新分配给 init ,这将读取状态。
答案 1 :(得分:0)
ps -ef
告诉你两个号码。进程ID和父进程ID。
杀死后者,你将杀死产生perl进程的东西。
或者 - kill -1 -1
会杀死所有进程(不要以root用户身份执行此操作!)。