From 844d6b506a56cfb525f0f45d893289bb41b3ba19 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Fri, 3 Mar 2017 20:47:06 +0100 Subject: [PATCH] interfaces: try to wait for dhclient exit, take 1 PR: https://forum.opnsense.org/index.php?topic=4682.0 --- src/etc/inc/interfaces.inc | 10 +--------- src/etc/inc/util.inc | 18 +++++++++++------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 8c6d00d8f..6cd0d8848 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -2453,15 +2453,7 @@ function kill_dhclient_process($interface) return; } - $i = 0; - while ((($pid = find_dhclient_process($interface)) != 0) && ($i < 3)) { - /* 3rd time make it die for sure */ - $sig = ($i == 2 ? 'KILL' : 'TERM'); - exec(sprintf('/bin/kill -%s %s', $sig, $pid)); - sleep(1); - $i++; - } - unset($i); + killbypid(find_dhclient_process($interface), 'TERM', true); } function interface_vlan_mtu_configured($realhwif, $mtu) diff --git a/src/etc/inc/util.inc b/src/etc/inc/util.inc index 14879ddc7..7964c3fb4 100644 --- a/src/etc/inc/util.inc +++ b/src/etc/inc/util.inc @@ -1,7 +1,7 @@ + Copyright (C) 2015-2017 Franco Fichtner Copyright (C) 2004-2007 Scott Ullrich Copyright (C) 2003-2004 Manuel Kasper . All rights reserved. @@ -41,12 +41,14 @@ function killbyname($procname, $sig = 'TERM') function killbypid($pidfile, $sig = 'TERM', $waitforit = false) { - if (!isvalidpid($pidfile)) { + if (isvalidpid($pidfile)) { + mwexecf('/bin/pkill -%s -F %s', array($sig, $pidfile)); + } elseif (is_numeric($pidfile) && $pidfile > 0) { + mwexecf('/bin/kill -%s %s', array($sig, $pidfile)); + } else { return; } - mwexecf('/bin/pkill -%s -F %s', array($sig, $pidfile)); - if (!$waitforit) { return; } @@ -58,11 +60,13 @@ function killbypid($pidfile, $sig = 'TERM', $waitforit = false) function isvalidpid($pidfile) { - if (!file_exists($pidfile)) { - return false; + if (file_exists($pidfile)) { + return mwexecf('/bin/pgrep -nF %s', $pidfile, true) == 0; + } elseif (is_numeric($pidfile) && $pidfile > 0) { + return mwexecf('/bin/kill -0 %s', $pidfile, true) == 0; } - return mwexecf('/bin/pgrep -nF %s', $pidfile, true) == 0; + return false; } function is_process_running($process)