:: Re: [DNG] How to test the backend o…
Αρχική Σελίδα
Delete this message
Reply to this message
Συντάκτης: aitor_czr
Ημερομηνία:  
Προς: dng
Αντικείμενο: Re: [DNG] How to test the backend of simple-netaid
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.