我已经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>
真正杀死进程。但是,请务必了解您正在强制关闭该进程,这意味着它将不是优雅地退出。