kill -9由于无用使用 Kill -9 form letter 中描述的原因,我试图避免。这个功能是否足够,或者我是否需要kill在超时后终止进程或处理其他微妙之处?
soft_kill()
{
# Try to avoid forcing a kill
# @param $1: PID
kill $1 || kill -INT $1 || kill -HUP $1 || \
(echo "Could not kill $1" >&2; kill -KILL $1)
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这个函数的更好的名字是什么?现在的名字让我想起了《温柔地杀了我》,manslaughter听起来有点严厉。也许spoon_kill(谷歌它)?
terminate () {
# accepts PID as $1, defaults to current process
local signals=(TERM INT QUIT HUP KILL) s=0 process=${1:-$$}
local signal_qty=${#signals[@]}
while pgrep $process >/dev/null
do
signal=${signals[s]}
[[ $signal = KILL ]] && echo "Attempting to force kill it." >&2
kill -$signal $process
(( ++s >= signal_qty )) && { echo "It won't die." >&2; return 1; }
sleep 1
done
}
Run Code Online (Sandbox Code Playgroud)
您的 soft_kill 有一些问题。
(1)
Kill()
返回值
如果成功,kill() 返回值为零。失败时,它返回值 -1,不发送信号,并将 errno 设置为以下值之一:
EINVAL
sig 的值是无效或不受支持的信号号。
EPERM
发送进程的用户ID没有特权;其真实或有效的用户ID与接收进程的真实或保存的用户ID不匹配。或者,该进程没有权限将信号发送到任何接收进程。
ESRCH
找不到与 pid 指定的进程或进程组相对应的进程或进程组。
| 归档时间: |
|
| 查看次数: |
3392 次 |
| 最近记录: |