aboutsummaryrefslogtreecommitdiffstats
path: root/timeKill.sh
diff options
context:
space:
mode:
authorlookshe <lookshe@lookshe-laptop.(none)>2014-09-21 00:17:28 +0200
committerlookshe <lookshe@lookshe-laptop.(none)>2014-09-21 00:17:28 +0200
commitce0e78eaeb3b2311327505789e7d56f89711add1 (patch)
treea4762905beb66cdedccb7d09cf2d9b7fe848e0cc /timeKill.sh
parentc6fc72134f3e11bab508e6bc01517d4e6804bc01 (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-xtimeKill.sh106
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