如何在bash脚本的后台任务即将被终止时执行一些命令

如何在bash脚本的后台任务即将被终止时执行一些命令

如果我在终端中运行一个脚本,并且该脚本包含一个后台作业,那么当用户关闭终端时(我猜想该脚本及其所有后台任务都将终止),我想要一些类似事件的东西,例如当作业即将被终止或终止时,执行一些代码块,例如:

while sleep 3h
do
backGround job commands 
done
those above is the back ground job 

我希望当我已经在终端上按下退出键时,在后台运行脚本,并且当这个作业即将完成并被终止时,在终止整个脚本之前执行一些其他命令,例如 C# 中的事件,当发生某些事情时,执行一段代码,我希望这次我能解释清楚

提前致谢 :)

答案1

每当收到 SIGINT、SIGTERM、SIGHUP 时,以下脚本都会将 Caught 附加到 Test.Out 文件中

#!/bin/bash

trap "echo 'Caught' >> Test.Out" SIGINT SIGTERM SIGHUP
while :
do
   sleep 1000
done

我喜欢信号最多。每当终端关闭时,它将被发送到 shell 脚本。

但我们无法逃脱KILL信号。:(http://en.wikipedia.org/wiki/SIGKILL#SIGKILL

编辑:有关 SIGHUP 的更多信息:http://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html#index-hangup-signal-2859

编辑:带有 Test.Out 文件生成的视频http://www.youtube.com/watch?v=qP0zClZZZHc

答案2

如果您不想在执行之前执行某些代码,可以使用trap

 #!/bin/bash
 trap "echo Exiting" SIGINT SIGTERM
 read        

更多信息这里

答案3

你可能想要at命令

at 3 hours <<END
backGround job commands 
END

相关内容