终止不断重启的进程


16

如果“ kill -9”不起作用怎么办?如何杀死启动新进程的脚本?无论如何对我没有帮助。

我有一个python脚本,使用杀死时,它会使用相同的端口自动从另一个进程ID开始sudo kill -9 <pid>

$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13242 ubuntu    3u  IPv4  64592      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill -9 13242
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16106 ubuntu    3u  IPv4  74792      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill 16106
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16294 ubuntu    3u  IPv4  75677      0t0  TCP localhost:3002 (LISTEN)

这不是僵尸进程。

$ ps -Al

4 S     0 16289     1  0  80   0 - 12901 poll_s ?        00:00:00 sudo
4 S  1000 16293 16289  0  80   0 -  1100 wait   ?        00:00:00 sh
0 S  1000 16294 16293  0  80   0 - 34632 poll_s ?        00:00:00 python

我什至sudo pkill -f <processname>没有运气就尝试过。它不想死。

更新:

它的父进程是sh其母公司是sudo在上表中提到。我不确定突然杀死这些人是否安全。这也是一个共享的ubuntu服务器。


看起来快要死了。您的lsof输出每次都会显示一个新的pid。该过程只是重新启动。
帕特里克

是的,它不想永远死。醒来就像它永远不会死:(
Lakshminarayanan Guptha

Answers:


26

自动以另一个进程ID启动意味着它是一个不同的进程。因此,有一个父进程来监视它的子进程,如果一个进程死了,它将由父进程重新生成。如果要完全停止服务,请了解如何停止父进程。杀死它SIGKILL当然是选项之一,但可能不是The Right One TM,因为服务监视器可能需要进行一些清理才能正确关闭。

要找到监视进程,您可能需要检查整个进程列表,因为实际的侦听器可能会将自己与父进程分离(通常是通过fork() + setsid()组合)。在这种情况下,我发现输出ps fauxprocps至少可能因其他实现而有所不同)非常方便-它在分层树中列出了所有进程。除非存在PID换行(另请参阅Wikipedia),否则监视器的PID应当小于任何侦听器的PID(除非您碰到了PID换行)。


其母公司是sh,其父母为sudo。可以杀死他们吗?
Lakshminarayanan Guptha 2014年

父级是哪个过程?一个正在监听端口3002?在这种情况下,请列出所有进程并猜测是哪个进程。使用linux procps,我通常发现的输出ps -faux足够提供信息。还要注意,监视器的PID应该小于实际侦听器的PID(除非您已经使系统启动了一段时间,并且自从服务启动以来就已经包装了PID)。
彼得2014年

大。ps -faux帮助开始从父母那里杀人。您能否使用评论中的解决方案来更新您的答案?
Lakshminarayanan Guptha 2014年

是的,我正在考虑... :)
彼得·彼得(Peterph)2014年

ps faux帮助检测supervisord哪个无限重启的挂起Laravel队列守护程序
antongorodezkiy

4

如果您知道进程的侦听端口,则可以使用fuserwith -k标志。

就像是,

fuser -k 3002/tcp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.