我正在使用CTRL-C来停止任务的程序,我想要做的是运行该任务一定的分钟数,然后按下CTRL-C就停止了。我想按ctrl + c按下停止的原因是因为当你停止程序而不是杀死程序并且可能丢失保存的数据时它会自动保存。
编辑;我不想使用cron,除非它停止我的脚本它会让程序保存数据,我希望在shell脚本中完成这个。
答案 0 :(得分:1)
trap语句捕获这些序列,并且可以编程为在捕获这些信号时执行命令列表。
- #!/斌/庆典
陷阱“echo Saving Data”SIGINT
while:
做
睡60年
完成
有关陷阱的信息:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html
答案 1 :(得分:1)
在60秒后使用timeout command发送SIGINT
:
timeout --signal=INT 60 /path/to/script.sh params
答案 2 :(得分:0)
如果您需要拦截 ctrl + c ,您应该使用trap
内置,如下所示:
cleanup(){ # do something...; }
trap 'cleanup' 2
# rest of the code
2
行上的 trap
是 ctrl + c 发出的SIGINT
信号,请参阅man 7 signals
< / p>
答案 3 :(得分:0)
尝试以下方法:
#!/bin/bash
set -m
/path/to/script.sh params &
set +m
bg_pid=$!
sleep 60
kill -2 $bg_pid
这应该允许您使用Job Control和set builtin
将SIGINT
发送到后台流程