diff options
author | lookshe <lookshe@lookshe-laptop.(none)> | 2014-09-21 00:17:28 +0200 |
---|---|---|
committer | lookshe <lookshe@lookshe-laptop.(none)> | 2014-09-21 00:17:28 +0200 |
commit | ce0e78eaeb3b2311327505789e7d56f89711add1 (patch) | |
tree | a4762905beb66cdedccb7d09cf2d9b7fe848e0cc /timeKill.sh | |
parent | c6fc72134f3e11bab508e6bc01517d4e6804bc01 (diff) |
scripts from laptop for copying and syncing pictures from camera and a script for killing a process at a specific time
Diffstat (limited to 'timeKill.sh')
-rwxr-xr-x | timeKill.sh | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/timeKill.sh b/timeKill.sh new file mode 100755 index 0000000..cd3f0ec --- /dev/null +++ b/timeKill.sh @@ -0,0 +1,106 @@ +#/bin/bash + +ende() { + printf "\b \b" + echo "$0 cancelled" + # show input again + stty echo + exit 10 +} + +trap ende 2 + +usage() { + echo "usage: $0 (processname|pid) time(hh:mm)" + exit 1 +} + +output() { + if [ $# -eq 1 ] + then + printf "$1" + sleep 3 + printf "\b \b" + fi +} + +rotate() { + rotate_help + rotate_help +} + +rotate_help() { + output "|" + output "/" + output "-" + output "\\" +} + +# exit if not 2 arguments are given +if [ $# -ne 2 ] +then + usage +fi + +process="$1" +time="$2" +actTime="$(date +%H:%M)" +# exit if given time is not correct +if [ "$(echo "$time" | sed 's/[01][0123456789]:[012345][0123456789]\|[2][0123]:[012345][0123456789]//g')" != "" ] +then + usage +fi + +# select if PID or processname is given +# hopefully no process is named only with numbers +if [ "$(echo "$process" | sed s/[0123456789]//g)" = "" ] +then + isPID="true" +else + isPID="false" +fi + +# exit if processname or PID is not single-valued +if [ $(ps -A | grep $process | wc -l) -ne 1 ] +then + echo "no process found or too many found! ($process)" + exit 2 +fi + +# convert processname to PID if neccessary +if [ "$isPID" = "false" ] +then + process="$(ps -A | grep $process | awk '{print $1}')" +fi + +# turn of showing input +stty -echo + +# endless loop ;-) +while [ 1 ] +do + # exit if process already stopped + if [ $(ps -A | awk '{print $1}' | grep $process | wc -l) -ne 1 ] + then + echo + echo "process already stopped" + stty echo + exit 0 + fi + + # if time has reached, then kill process and exit + if [ "$actTime" = "$time" ] + then + kill "$process" + echo + echo "process killed succesfully" + stty echo + exit 0 + # output to see that the script works + # checks every 48 sec + else + rotate + rotate + fi + actTime=$(date +%H:%M) +done |