如何停止作为守护进程运行的程序

如何停止作为守护进程运行的程序

我已经iperf以守护进程模式启动了iperf -s -D,现在我想停止该服务。我尝试使用sudo kill pid但它既不起作用也没有抱怨。当我检查时,守护进程仍在运行ps -ef | grep iperf

由于它不是由 Linux 启动的,因此我无法service像其他守护进程一样找到它。

我怎样才能阻止它呢?

答案1

不要使用kill -9!该命令仅适用于某些特定的极端情况。

根据手册页(在我的 Solaris 机器上):

DESCRIPTION
 The kill utility sends a signal to the process or  processes
 specified by each pid operand.

 For each pid operand, the kill utility will perform  actions
 equivalent to the kill(2) function called with the following
 arguments:

 1.  The value of the pid operand will be  used  as  the  pid
     argument.

 2.  The sig argument  is  the  value  specified  by  the  -s
     option,  the  -signal_name option, or the -signal_number
     option, or, if none of these options  is  specified,  by
     SIGTERM.

 The signaled process must belong to the current user  unless
 the user is the super-user.

当您没有指定任何信号时,kill 将向kill -15您的进程发送SIGTERM ( )。您可以发送比 SIGKILL ( ) 更暴力的信号kill -9

为什么要避免kill -9?

SIGKILL是一个非常暴力的信号。它不能被进程捕获,这意味着接收它的进程必须立即丢弃所有内容并退出。它不需要花时间来释放它锁定的资源(如网络套接字或文件),也不需要通知其他进程退出。通常,它会使您的机器处于不稳定状态。打个比方,您可以说使用 SIGKILL 终止进程与使用电源按钮(而不是命令shutdown)关闭计算机一样糟糕。

事实上,SIGKILL 应该是尽可能避免。相反,正如文章中提到的,建议您尝试一下,kill -2如果这不起作用kill -1

我见过人们总是急于发送 SIGKILL(即使是在日常清理脚本中!)。我每天都和我的队友为此争吵。请大家不要kill -9盲目使用。

答案2

因为看起来这个iperf进程没有响应您的“终止”信号(kill <pid>命令发送的默认信号)。这通常意味着进程因某种原因崩溃或卡在输入/输出访问中。

你只需要更加暴力并发出“KILL”信号:

kill -9 <pid>

或者

kill -KILL <pid>

这将终止进程而不等待它正确完成。

答案3

尽管通常不建议这样做,但您始终可以kill -9 <pid>真正杀死进程。但是,请务必了解您正在强制关闭该进程,这意味着它将不是优雅地退出。

答案4

您可以通过向其发送信号(如建议的信号号 1)来停止iperf3以守护进程模式启动的选项-DSIGHUP拉赫穆的回答):

pkill -HUP iperf3

或者

pkill -1 iperf3

相关内容