Bash:睡眠进程不会被终止 [英] bash: sleep process not getting killed
本文介绍了Bash:睡眠进程不会被终止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我编写了一个简单的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 22880
将SIGTERM
赋给ID为22880
的进程,它将终止该进程。然而,在此之后,我仍然看到在180秒后退出的睡眠命令正在运行。
user 22881 0.0 0.0 7196 356 pts/28 S 20:12 0:00 sleep 180s
为什么会发生这种情况?我需要做什么才能不让sleep 180s
进程继续运行?
推荐答案
kill -15 22880
将向执行该脚本的外壳程序发送信号,但不会发送sleep
命令。若要将信号发送到进程组中的每个进程,您应该能够指定负进程ID。
kill -15 -22880
或者,确保该脚本在退出前终止其子级。
trap 'kill $(jobs -p)' EXIT
echo "Sleeping..."
sleep 180s & wait
如果在收到信号时将sleep
留在前台,则外壳必须等到退出后才能运行陷阱;sleep
是不可中断的。解决方法是在后台运行它,然后在其上运行wait
。wait
是内置的外壳程序,可以被中断,以便陷阱立即运行并终止所有仍在进行中的后台进程。
这篇关于Bash:睡眠进程不会被终止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文