如何在运行命令时设置超时时间
时间:2019-04-29 03:17:16 来源:igfitidea点击:
如何在Linux上执行命令时限制其时间,如果在给定的时间后还在运行,则将进程杀掉?
Linux中有一个timeout的命令,它可以限制一个命令的运行时间。 另外还可以使用bash和perl语法实现
Linux时间限制命令 - 使用timeout
timeout的语法
timeout DURATION COMMAND timeout DURATION COMMAND arg1 arg2 timeout [options] DURATION COMMAND arg1 arg2
DURATION是设置超时时间,单位可以是:
- s 秒(默认)
- m 分钟
- h 小时
- d 天
如何运行ping命令并在30秒后中止它
date timeout 30s ping www.baidu.com timeout 30s ping 192.168.1.22 date
或者
ping www.baidu.com & sleep 30s; kill $!
使用timeout的时候如何指定信号(默认是杀掉进程)
语法:
timeout -s 9 YourCommandHere timeout --signal=9 YourCommandHere timeout -s 9 2m tail -F /var/log/secure timeout -s 15 10s tracepath baidu.com
示例- 发送SIGTERM 作为终止信号
timeout -s SIGTERM 10s ping baidu.com
timeout如何设置宽限期
应用场合:linux中一个程序先执行正常的关闭程序,如果超过指定进程还在,则将进程杀掉。
使用 -k 或者 --kill-after=DURATION
选项
timeout -k=5 2m command1 arg1
例如 如果COMMAND1在发送初始信号SIGTERM后5秒还在运行,则发送终止信号SIGKILL:
timeout -k=5 -s SIGTERM 2m /path/to/my-app arg1 arg2
查看linux中的所有信号量
# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
Linux设置命令运行的时间 - 使用bash实现
MyCoolCommand Arg1 & read -t TIMEOUT_VALUE || kill $! ## 示例 command arg1 & read -t 30 || kill $! ping 192.168.2.254 & read -t 10 || kill $! tail -F /var/log/secure & read -t 60 || kill $!
Linux设置命令运行的时间 - 使用perl实现
## define doalarm() shell ## doalarm() { perl -e 'alarm shift; exec @ARGV' -- "$@"; } ## 30秒后超时 ## doalarm 600 vim /path/to/demo.py ## ping10秒后超时 ## doalarm 10 ping baidu.com