1

我正在使用使用 CTRL-C 来停止任务的程序,我想做的是将该任务运行一定的分钟数,然后让它像按下 CTRL-C 一样停止。我希望它像按 ctrl+c 一样停止的原因是因为它会在您停止程序时自动保存,而不是杀死它并可能丢失保存的数据。

编辑; 我不想使用 cron ,除非它停止我的脚本,它会让程序保存数据,我希望在 shell 脚本中完成这个。

4

4 回答 4

1

陷阱语句捕获这些序列,并且可以编程为在捕获这些信号时执行命令列表。

-#!/bin/bash

陷阱“回声保存数据”SIGINT

while :
do sleep 60
done

有关陷阱的信息:http: //tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html

于 2013-04-03T18:14:00.423 回答
1

使用timeout 命令SIGINT在 60 秒后发送:

timeout --signal=INT 60 /path/to/script.sh params
于 2013-04-03T19:24:38.257 回答
0

如果你需要拦截ctrl+ c,你应该使用trap内置的,像这样:

cleanup(){ # do something...; }

trap 'cleanup' 2

# rest of the code

2在线trap是+发送的SIGINT信号,见ctrlcman 7 signals

于 2013-04-03T17:49:15.920 回答
0

尝试以下操作:

#!/bin/bash
set -m
/path/to/script.sh params &
set +m

bg_pid=$!

sleep 60

kill -2 $bg_pid

这应该允许您使用Job Controlset 内置发送SIGINT到后台进程

于 2013-04-03T19:16:15.450 回答