【问题标题】:bash: sleep process not getting killed [duplicate]bash:睡眠过程没有被杀死[重复]
【发布时间】:2016-03-30 00:52:52
【问题描述】:

我写了一个简单的 bash 脚本,它除了休眠什么都不做。

#!/bin/bash

echo "Sleeping..."
sleep 180s

运行脚本后,我看到两个进程在我的系统上运行:

user 22880  0.0  0.0  12428  1412 pts/28   S+   20:12   0:00 /bin/bash ./sleep.sh
user 22881  0.0  0.0   7196   356 pts/28   S+   20:12   0:00 sleep 180s

我使用kill -15 22880SIGTERM 分配给ID 为22880 的进程,这会杀死进程。但是,在这之后,我仍然看到 sleep 命令在运行,它在 180 秒后退出。

user 22881  0.0  0.0   7196   356 pts/28   S    20:12   0:00 sleep 180s

为什么会这样?我需要做什么才能不让sleep 180s 进程继续运行?

【问题讨论】:

  • 奇怪...我尝试了您的脚本(使用 sh 和 ./) ps -aux 在进程号的 kill -15 之后不再返回任何内容,您如何显示进程列表,用 ps -aux ?
  • 是的。我做了一个ps aux | grep sleep。即使我给了SIGKILL,这个过程仍然存在。
  • 好的我明白了,这是 grep 的过程不是你的脚本,试试 ps -aux |grep idontexist :)
  • @Anyone_ph 不确定这是否属实。 grep 进程为:user 22887 0.0 0.0 11744 912 pts/29 S+ 20:13 0:00 grep --color=auto sleep,与sleep 180s 进程不同。

标签: bash shell signals sleep


【解决方案1】:

kill -15 22880 将向执行脚本的 shell 发送信号,但不会向 sleep 命令发送信号。要将信号发送到进程中的每个进程,您应该能够指定一个否定进程ID。

kill -15 -22880

或者,确保脚本在退出前杀死其子级。

trap 'kill $(jobs -p)' EXIT
echo "Sleeping..."
sleep 180s & wait

如果在接收到信号时将sleep留在前台,shell必须等到退出后才能运行trap; sleep 是不间断的。解决方法是在后台运行它,然后在其上运行waitwait,作为一个内置的 shell,可以被中断,以便陷阱立即运行并杀死任何仍在进行中的后台进程。

【讨论】:

【解决方案2】:

您也可以使用 killall sleepkill -9/15 $(pidof sleep)

9 用于终止进程,15 用于终止进程

bash$ ps -ef|grep sleep
pratik   24775  2695  0 23:44 pts/0    00:00:00 sleep 600
pratik   24778 24690  0 23:44 pts/29   00:00:00 grep --color=auto sleep
bash$ killall sleep 
bash$ ps -ef|grep sleep
pratik   24792 24690  0 23:44 pts/29   00:00:00 grep --color=auto sleep
bash$
bash$ ps -ef|grep sleep
pratik   24978  2695  0 23:52 pts/0    00:00:00 sleep 600
pratik   24981 24690  0 23:52 pts/29   00:00:00 grep --color=auto sleep
bash$ kill -15 $(pidof sleep)
bash$ ps -ef|grep sleep
pratik   24986 24690  0 23:52 pts/29   00:00:00 grep --color=auto sleep`

【讨论】:

    猜你喜欢
    • 2023-02-01
    • 2023-03-26
    • 1970-01-01
    • 2022-01-25
    • 2015-11-09
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多