Ich weiß wirklich nicht, was genau ich hier falsch mache. Ich möchte die PID eines Anrufers aus dem eingehenden Signal extrahieren, aber der Wert, den ich bekomme, ist völlig falsch.Falsche PID-Aufruf Prozess bei der Behandlung von Signal in C
Hier ist mein Code für "Fänger":
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
int SIGNALS_RECEIVED = 0;
pid_t CALLING_PID;
void signal_received(int sig, siginfo_t *info, void *context) {
SIGNALS_RECEIVED++;
if(SIGNALS_RECEIVED == 1) {
CALLING_PID = info->si_pid;
printf("%ld\n", (long) CALLING_PID);
}
}
int main() {
struct sigaction act;
act.sa_sigaction = &signal_received;
sigaction(SIGUSR1, &act, NULL);
while(1) {
}
return 0;
}
Und "Absender":
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
int main(int argc, char **argv) {
char line[10];
FILE *cmd = popen("pidof -s catcher", "r");
fgets(line, 10, cmd);
pid_t pid = strtoul(line, NULL, 10);
pclose(cmd);
int i;
for(i = 0; i < 400; i++) {
kill(pid, SIGUSR1);
}
kill(pid, SIGUSR2);
return 0;
}
Als Ergebnis, wenn auf den ersten Fänger läuft, und dann Absender, die ich erhalten:
./catcher
398533948
SIGNALS_RECEIVED: 24
Während pid des Absenders:
ps aux | grep *sender
maciej 4704 100 0.0 4328 1268 pts/13 R+ 22:46 0:15 ./sender
Meine Linux-Version:
Linux version 4.2.0-34-generic ([email protected]) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)) #39~14.04.1-Ubuntu SMP Fri Mar 11 11:38:02 UTC 2016