| Summary: | Regression: killproc ignores -d | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Leos Pol <lpol> |
| Component: | initscripts | Assignee: | Lukáš Nykrýn <lnykryn> |
| Status: | CLOSED ERRATA | QA Contact: | qe-baseos-daemons |
| Severity: | urgent | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 6.8 | CC: | psklenar, tlavigne |
| Target Milestone: | rc | Keywords: | Regression |
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | initscripts-9.03.53-1.el6 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2016-05-11 01:08:13 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
|
Description
Leos Pol
2016-04-11 12:54:44 UTC
Possible fix:
diff --git a/rc.d/init.d/functions b/rc.d/init.d/functions
index a72a8b8..3a134ca 100644
--- a/rc.d/init.d/functions
+++ b/rc.d/init.d/functions
@@ -115,6 +115,11 @@ __kill_pids_term_kill() {
local stat=($(< /proc/self/stat))
local base_stime=${stat[21]}
+ if [ "$1" = "-d" ]; then
+ delay=$2
+ shift 2
+ fi
+
kill_list=$(__kill_pids_term_kill_checkpids $base_stime $kill_list)
[ -z "$kill_list" ] && return 0
@@ -491,7 +496,7 @@ killproc() {
if [ -n "$pid" ] ; then
[ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base "
if [ -z "$killlevel" ] ; then
- __kill_pids_term_kill $pid
+ __kill_pids_term_kill -d $delay $pid
RC=$?
[ "$RC" -eq 0 ] && success $"$base shutdown" || failure $"$base shutdown"
# use specified level only
Lukas, I've found terrible bug in this patch.
__kill_pids_term_kill() {
local try=0
local delay=3;
local pid=
local kill_list=$* <==== in the kill_list can be also something like -d 60
local stat=($(< /proc/self/stat))
local base_stime=${stat[21]}
if [ "$1" = "-d" ]; then
delay=$2
shift 2
fi
after this __kill_pids_term_kill_checkpids filter out from kill_list "-d", but if a process with pid 60 exists, it stays in the kill_list.
Example:
# ps -p60
PID TTY TIME CMD
60 ? 00:00:00 md/2
# sleep 100 &
[1] 24658
# echo $! > /tmp/pid
# killproc -p /tmp/pid -d 60 sleep
kill_list 60 24658 <==== i've put echo "kill_list $kill_list" just before signaling TERM
[1]+ Terminated sleep 100
It terms the sleep, but cannot terminate md/2 (thankfully) and waits for 60s because of delay.
Example from comment 5: initscripts-9.03.52-1.el6: fail initscripts-9.03.53-1.el6: pass TestCase passes on all arch with initscripts-9.03.53-1.el6. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2016-0951.html |