Hi KatolaZ,
On 19/3/19 11:13, KatolaZ wrote:
On Tue, Mar 19, 2019 at 11:00:59AM +0100, aitor_czr wrote:
[cut]
I answer myself, referring to the use of pkill wpa_supplicant:
#include <signal.h>
int kill_wpa_supplicant(void)
{
pid_t wpa_pid;
FILE *fp;
fp = (fopen("/var/run/wpa_supplicant.pid", "r"));
if (fp == NULL) {
printf("Couldn't read Wpasupplicant pid file, not trying to kill.");
return 0;
aitor, please notice that the pid file for wpa_supplicant can be
literally*anywhere*. At the moment, in Devuan Beowulf, it is stored
in the folder/var/run/wpa_supplicant/. But this is just very
unreliable, IMHO. Please also consider that `wpa_supplicant(8)` has an
option "-P" that allows to specify the path to pidfile...
My2Cents
KatolaZ
The following code does the job:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
int main()
{
char *pid, output[1024];
FILE *fp = popen ( "pidof wpa_supplicant", "r" );
fgets ( output, 1024, fp );
fclose ( fp );
pid = strtok ( output, " " );
while( pid )
{
pid_t wpa_pid=atoi ( pid );
if ( ( kill ( wpa_pid, SIGTERM ) ) == 0) return 0;
else {
kill ( wpa_pid, SIGKILL ); // Still alive? Die!
return 0;
}
pid = strtok ( NULL , " " );
}
}
Analogous to the following bash script, used in the "kill-all-dhcp" of
netcfg (but extended to all the dhcp clients):
#!/bin/sh
# Killall for dhcp clients.
for client in dhclient udhcpc pump dhcp6c; do
pid=$(pidof $client) || true
[ "$pid" ] || continue
echo $pid
if kill -0 $pid 2>/dev/null; then
kill -TERM $pid
sleep 1
# Still alive? Die!
if kill -0 $pid 2>/dev/null; then
kill -KILL $pid
fi
fi
done
Cheers,
Aitor.
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng