Browse code

Kill process groups in screen_stop()

Previously only the top child process was killed, killing the process
group also takes all of the child processes with it.

Closes-bug: 1271889
Change-Id: If1864cc4f1944f417ea3473d81d8b6e8e40030c2

Dean Troyer authored on 2014/01/24 02:32:22
Showing 1 changed files
... ...
@@ -1150,6 +1150,9 @@ function screen_it {
1150 1150
 
1151 1151
 
1152 1152
 # Stop a service in screen
1153
+# If a PID is available use it, kill the whole process group via TERM
1154
+# If screen is being used kill the screen window; this will catch processes
1155
+# that did not leave a PID behind
1153 1156
 # screen_stop service
1154 1157
 function screen_stop() {
1155 1158
     SCREEN_NAME=${SCREEN_NAME:-stack}
... ...
@@ -1159,7 +1162,7 @@ function screen_stop() {
1159 1159
     if is_service_enabled $1; then
1160 1160
         # Kill via pid if we have one available
1161 1161
         if [[ -r $SERVICE_DIR/$SCREEN_NAME/$1.pid ]]; then
1162
-            pkill -TERM -P $(cat $SERVICE_DIR/$SCREEN_NAME/$1.pid)
1162
+            pkill -TERM -P -$(cat $SERVICE_DIR/$SCREEN_NAME/$1.pid)
1163 1163
             rm $SERVICE_DIR/$SCREEN_NAME/$1.pid
1164 1164
         fi
1165 1165
         if [[ "$USE_SCREEN" = "True" ]]; then