我正在使用使用CTRL-C停止任务的程序,我想做的是运行该任务一定数量的分钟,然后让它停止,就像按下CTRL-C一样。我想让它像按ctrl+c一样停止的原因是,当你停止程序时,它会自动保存,而不是杀死它,可能会丢失保存的数据。
编辑;我不想使用cron,除非它停止我的脚本,它将有程序保存数据,我希望在shell脚本内完成此操作。
trap语句捕获这些序列,并可编程为在捕获这些信号时执行一系列命令。
- # !/bin/bash
trap "echo Saving Data" SIGINT
:
做睡眠60
做
关于陷阱的信息:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html
使用timeout命令60秒后发送SIGINT
:
timeout --signal=INT 60 /path/to/script.sh params
如果您需要截取ctrl+c,您应该使用trap
内置,如下所示:
cleanup(){ # do something...; }
trap 'cleanup' 2
# rest of the code
trap
线上的 2
为ctrl+c发出的SIGINT
信号,参见man 7 signals
尝试如下:
#!/bin/bash
set -m
/path/to/script.sh params &
set +m
bg_pid=$!
sleep 60
kill -2 $bg_pid
这应该允许您使用作业控制和内置设置将SIGINT
发送到后台进程