Robustify service shutdown

* Save PID when using screen in screen_it()
* Add screen_stop()
* Call out service stop_*() in unstack.sh functions so screen_stop()
  can do its thing

Closes-bug: 1183449
Change-Id: Iac84231cfda960c4197de5b6e8ba6eb19225169a
diff --git a/lib/ceilometer b/lib/ceilometer
index fac3be1..211303f 100644
--- a/lib/ceilometer
+++ b/lib/ceilometer
@@ -162,7 +162,7 @@
 function stop_ceilometer() {
     # Kill the ceilometer screen windows
     for serv in ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api ceilometer-alarm-notifier ceilometer-alarm-evaluator; do
-        screen -S $SCREEN_NAME -p $serv -X kill
+        screen_stop $serv
     done
 }
 
diff --git a/lib/cinder b/lib/cinder
index cbe732e..11414be 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -556,7 +556,7 @@
 function stop_cinder() {
     # Kill the cinder screen windows
     for serv in c-api c-bak c-sch c-vol; do
-        screen -S $SCREEN_NAME -p $serv -X kill
+        screen_stop $serv
     done
 
     if is_service_enabled c-vol; then
diff --git a/lib/glance b/lib/glance
index 135136d..80868ae 100644
--- a/lib/glance
+++ b/lib/glance
@@ -206,8 +206,8 @@
 # stop_glance() - Stop running processes
 function stop_glance() {
     # Kill the Glance screen windows
-    screen -S $SCREEN_NAME -p g-api -X kill
-    screen -S $SCREEN_NAME -p g-reg -X kill
+    screen_stop g-api
+    screen_stop g-reg
 }
 
 
diff --git a/lib/heat b/lib/heat
index e44a618..29cd967 100644
--- a/lib/heat
+++ b/lib/heat
@@ -175,7 +175,7 @@
 function stop_heat() {
     # Kill the screen windows
     for serv in h-eng h-api h-api-cfn h-api-cw; do
-        screen -S $SCREEN_NAME -p $serv -X kill
+        screen_stop $serv
     done
 }
 
diff --git a/lib/keystone b/lib/keystone
index 29b9604..dc6a730 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -421,7 +421,7 @@
 # stop_keystone() - Stop running processes
 function stop_keystone() {
     # Kill the Keystone screen window
-    screen -S $SCREEN_NAME -p key -X kill
+    screen_stop key
 }
 
 
diff --git a/lib/nova b/lib/nova
index 39685a8..178f8ee 100644
--- a/lib/nova
+++ b/lib/nova
@@ -705,7 +705,7 @@
     # Some services are listed here twice since more than one instance
     # of a service may be running in certain configs.
     for serv in n-api n-cpu n-crt n-net n-sch n-novnc n-xvnc n-cauth n-spice n-cond n-cell n-cell n-api-meta; do
-        screen -S $SCREEN_NAME -p $serv -X kill
+        screen_stop $serv
     done
     if is_service_enabled n-cpu && [[ -r $NOVA_PLUGINS/hypervisor-$VIRT_DRIVER ]]; then
         stop_nova_hypervisor
diff --git a/lib/trove b/lib/trove
index f8e3edd..870afbe 100644
--- a/lib/trove
+++ b/lib/trove
@@ -198,7 +198,7 @@
 function stop_trove() {
     # Kill the trove screen windows
     for serv in tr-api tr-tmgr tr-cond; do
-        screen -S $SCREEN_NAME -p $serv -X kill
+        screen_stop $serv
     done
 }