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 + -
显示快捷键?