Ich versuche, ein Programm in C++ zu schreiben, das Signale an ein anderes sendet, so wie Sie es mit dem kill
-Befehl in Linux tun würden, aber es scheint, dass ich einige Konvertierungsprobleme habe. Wie ich es sehe, kann ich Signale nicht einfach als Zeichenfolgen (SIGINT
, SIGUSR1
usw.) durch das Terminal leiten und sie einfach in das Programm konvertieren. Ich war auch nicht in der Lage, mein Ziel zu erreichen, indem ich sie als ihren Korrespondenten int
s (2,30 usw.) übermittelte und direkt einen Systemaufruf verwendete. Hier ist mein Code:Signal-Sender-Konvertierung
Passing Signale als int-Typen
#include <iostream>
#include <csignal>
#include <unistd.h>
#include <cstdlib>
using namespace std;
int main (int argc, char* argv[]) {
int pid = atoi(argv[1]);
int signal = atoi(argv[2]); //passing signals directly as int
cout << signal << endl;
int error = kill(pid, signal);
if(error !=0)
cout << "Error sending signal to catcher program."<< endl;
return 0;
}
Ausgang
~$./signal_sender 5977 2
2
Error sending signal to catcher program.
Was, wenn ich mit Streichern versuchte, konnte ich nicht eine Umwandlung finden, die richtig funktioniert.
Vielen Dank im Voraus.
Was ist das 'errno' Sie erhalten' töten() '? – NPE
'ESRCH 3/* Kein solcher Prozess * /' Ich schätze, ich habe Signale an das falsche Pid gesendet. Indem ich es korrigiere, habe ich es durch Ints laufen lassen, aber immer noch kein Glück beim Passieren von Strings. –
Siehe meine vollständige Antwort unten. – NPE