system: default to wait for pid during signaling

Except when HUP is used, which would wait forever.
This commit is contained in:
Franco Fichtner 2023-03-14 08:05:32 +01:00
parent d1f981b6c3
commit 4292bd3500
3 changed files with 15 additions and 15 deletions

View File

@ -886,14 +886,14 @@ function interface_bring_down($interface = 'wan', $ifacecfg = false)
configdp_run('interface reconfigure', [$interface], true);
break;
}
killbypid("/var/run/{$ppp['type']}_{$interface}.pid", 'TERM', true);
killbypid("/var/run/{$ppp['type']}_{$interface}.pid");
break;
}
}
}
break;
case 'dhcp':
killbypid("/var/run/dhclient.{$realif}.pid", 'TERM', true);
killbypid("/var/run/dhclient.{$realif}.pid");
break;
default:
break;
@ -1245,7 +1245,7 @@ EOD;
unset($mpdconf);
/* stop the service as a precaution */
killbypid("/var/run/{$ppp['type']}_{$interface}.pid", 'TERM', true);
killbypid("/var/run/{$ppp['type']}_{$interface}.pid");
// Create the uptime log if requested and if it doesn't exist already, or delete it if it is no longer requested.
if (isset($ppp['uptime'])) {
@ -1310,7 +1310,7 @@ function interface_proxyarp_configure($interface = '')
/* kill any running choparp, on restart "all" */
if (empty($interface)) {
killbyname('choparp');
killbyname('choparp'); /* XXX only kills one */
}
$paa = array();
@ -2703,7 +2703,7 @@ function interface_dhcpv6_configure($interface, $wancfg)
$realifv6 = get_real_interface($interface, 'inet6');
/* always kill rtsold in case of reconfigure */
killbypid('/var/run/rtsold.pid', 'TERM', true);
killbypid('/var/run/rtsold.pid');
$rtsoldcommand = exec_safe(
'/usr/sbin/rtsold -p %s -M %s -O %s -R %s -a -u',
@ -3113,7 +3113,7 @@ function interface_dhcp_configure($interface = 'wan')
return;
}
killbypid("/var/run/dhclient.{$wanif}.pid", 'TERM', true);
killbypid("/var/run/dhclient.{$wanif}.pid");
$fd = fopen("/var/etc/dhclient_{$interface}.conf", "w");
if (!$fd) {

View File

@ -572,7 +572,7 @@ function dhcpd_dhcp4_configure($verbose = false)
service_log('Starting DHCPv4 service...', $verbose);
killbypid('/var/dhcpd/var/run/dhcpd.pid', 'TERM', true);
killbypid('/var/dhcpd/var/run/dhcpd.pid');
/* Only consider DNS servers with IPv4 addresses for the IPv4 DHCP server. */
$dns_arrv4 = [];
@ -1272,8 +1272,8 @@ function dhcpd_dhcp6_configure($verbose = false, $blacklist = [])
service_log('Starting DHCPv6 service...', $verbose);
killbypid('/var/dhcpd/var/run/dhcpdv6.pid', 'TERM', true);
killbypid('/var/run/dhcpleases6.pid', 'TERM', true);
killbypid('/var/dhcpd/var/run/dhcpdv6.pid');
killbypid('/var/run/dhcpleases6.pid');
$iflist = get_configured_interface_with_descr();
$ifconfig_details = legacy_interfaces_details();
@ -1628,7 +1628,7 @@ function dhcpd_dhcrelay4_configure($verbose = false)
service_log('Starting DHCPv4 relay...', $verbose);
killbypid('/var/run/dhcrelay.pid', 'TERM', true);
killbypid('/var/run/dhcrelay.pid');
$iflist = get_configured_interface_with_descr();
$ifconfig_details = legacy_interfaces_details();
@ -1740,7 +1740,7 @@ function dhcpd_dhcrelay6_configure($verbose = false)
service_log('Starting DHCPv6 relay...', $verbose);
killbypid('/var/run/dhcrelay6.pid', 'TERM', true);
killbypid('/var/run/dhcrelay6.pid');
$iflist = get_configured_interface_with_descr();
$ifconfig_details = legacy_interfaces_details();

View File

@ -32,12 +32,12 @@
require_once 'IPv6.inc';
function killbyname($procname, $sig = 'TERM', $waitforit = false)
function killbyname($procname, $sig = 'TERM', $waitforit = true)
{
_killbypid(shell_safe('/bin/pgrep -anx %s', $procname), $sig, $waitforit);
}
function killbypid($pid_or_file, $sig = 'TERM', $waitforit = false)
function killbypid($pid_or_file, $sig = 'TERM', $waitforit = true)
{
$pid = $pid_or_file;
@ -56,7 +56,7 @@ function _killbypid($pid, $sig, $waitforit)
mwexecf('/bin/kill -%s %s', [$sig, $pid]);
if (!$waitforit) {
if (!$waitforit || $sig == 'HUP') {
return;
}
@ -197,7 +197,7 @@ function service_control_stop($name, $extras)
mwexec($cmd);
}
} elseif (isset($service['pidfile'])) {
killbypid($service['pidfile'], 'TERM', true);
killbypid($service['pidfile']);
} else {
/* last resort, but not very elegant */
killbyname($service['name']);