|
|
@@ -59,18 +59,18 @@ is_running()
|
|
|
[ -n "$target" ] || return 1
|
|
|
|
|
|
for pid in /proc/[0-9]*; do
|
|
|
- [ -r "$pid/exe" ] || continue
|
|
|
exe=$(readlink "$pid/exe" 2>/dev/null) || continue
|
|
|
+ exe="${exe% *}"
|
|
|
[ "$exe" = "$target" ] && return 0
|
|
|
done
|
|
|
|
|
|
return 1
|
|
|
}
|
|
|
|
|
|
-# kill program(s) by name
|
|
|
+# kill program(s) by path
|
|
|
# $1: program's executable path
|
|
|
# $2: signal to send (default: 15)
|
|
|
-kill_programs()
|
|
|
+kill_by_path()
|
|
|
{
|
|
|
local target="$1" pid exe
|
|
|
local sig=${2:-15}
|
|
|
@@ -83,8 +83,8 @@ kill_programs()
|
|
|
[ "$sig" -ge 1 -a "$sig" -le 64 ] 2>/dev/null || return 1
|
|
|
|
|
|
for pid in /proc/[0-9]*; do
|
|
|
- [ -r "$pid/exe" ] || continue
|
|
|
exe=$(readlink "$pid/exe" 2>/dev/null) || continue
|
|
|
+ exe="${exe% *}"
|
|
|
if [ "$exe" = "$target" ]; then
|
|
|
kill -$sig "${pid##*/}" 2>/dev/null
|
|
|
fi
|
|
|
@@ -96,13 +96,14 @@ kill_programs()
|
|
|
# $1: program's executable path
|
|
|
# $2: timeout in seconds (default: 5)
|
|
|
# return 0 if terminated gracefully
|
|
|
+# return 1 function failed
|
|
|
# return 2 if force killed after timeout
|
|
|
graceful_kill() {
|
|
|
local target="$1" timeout="${2:-5}" waited=0
|
|
|
|
|
|
[ -n "$target" ] || return 1
|
|
|
|
|
|
- kill_programs "$target" 15 || return 1
|
|
|
+ kill_by_path "$target" 15 || return 1
|
|
|
|
|
|
while is_running "$target" && [ "$waited" -lt "$timeout" ]; do
|
|
|
sleep 1
|
|
|
@@ -110,7 +111,7 @@ graceful_kill() {
|
|
|
done
|
|
|
|
|
|
if is_running "$target"; then
|
|
|
- kill_programs "$target" 9
|
|
|
+ kill_by_path "$target" 9
|
|
|
return 2
|
|
|
fi
|
|
|
|