timeout3
来自「android-w.song.android.widget」· 代码 · 共 93 行
TXT
93 行
#!/bin/bash## The Bash script executes a command with a time-out.# Based on the Bash documentation example.## Upon time-out expiration SIGTERM (15) is sent to the process. If the signal# is blocked, then the subsequent SIGKILL (9) terminates it.# Dmitry V Golovashkin (E-mail: dvg@ieee.org)#script_name="${0##*/}"# Default values.readonly param_timeout=5readonly param_interval=1readonly param_delay=1declare -i timeout=param_timeoutdeclare -i interval=param_intervaldeclare -i delay=param_delayblue="$(tput setaf 4)"bold_red="$(tput bold; tput setaf 1)"off="$(tput sgr0)"function print_usage() {cat <<EOFSynopsis: $script_name [-t timeout] [-i interval] [-d delay] commandExecutes the command with a time-out. Upon time-out expiration SIGTERM (15) issent to the process. If SIGTERM signal is blocked, then the subsequent SIGKILL(9) terminates it.$blue-t timeout$off Number of seconds to wait for command completion. Default value: $param_timeout seconds. In some practical situations this value ${bold_red}must$off be increased (for instance -t 180) to allow the command to complete.$blue-i interval$off Interval between checks if the process is still alive. Positive integer, default value: $param_interval seconds. Default value is OK for most situations.$blue-d delay$off Delay between posting the SIGTERM signal and destroying the process by SIGKILL. Default value: $param_delay seconds. Default value is OK for most situations.As of today, Bash does not support floating point arithmetic (sleep does),therefore all time values must be integers.Dmitry Golovashkin (E-mail: dvg@ieee.org)EOFexit 1 # No useful work was done.}# Options.while getopts ":t:i:d:" option; do case "$option" in t) timeout=$OPTARG ;; i) interval=$OPTARG ;; d) delay=$OPTARG ;; *) print_usage ;; esacdoneshift $((OPTIND - 1))# $# should be at least 1 (the command to execute), however it may be strictly# greater than 1 if the command itself has options.if (($# == 0 || interval <= 0)); then print_usagefi# kill -0 pid Exit code indicates if a signal may be sent to "pid" process.( ((t = timeout)) while ((t > 0)); do sleep $interval kill -0 $$ || exit 0 ((t -= interval)) done # Be nice, post SIGTERM first. # The 'exit 0' below will be executed if any preceeding command fails. kill -s SIGTERM $$ && kill -0 $$ || exit 0 sleep $delay kill -s SIGKILL $$) 2> /dev/null &exec "$@"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?