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