如何在Linux中循环后台终止背景?

时间:2017-06-04 23:29:51

标签: linux perl

我找不到终止后台while循环的方法。

我在无限循环中启动了一个Perl脚本(即while true; do perl abc.pl; done),终端会话断开了。

现在我正在尝试终止该循环。

如果我ps -aux | grep perl,我看到Perl脚本正在运行。

如果我kill -9 <process id>,它会一直显示不同的进程ID。

我该如何终止它?

我找到的唯一解决方法是重命名我的脚本,然后停止。

2 个答案:

答案 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用户身份执行此操作!)。