Systemcalls Signal
-
Hallo,
ich habe dieser Programm Code bekommen, da ich leider keine C++ profi Programmer mir fehlt es schwer zu verstehen was hier passiert..So viel ich weiß es geht um drei Prozesse, die erste Case-1:liefert eine Fehler Meldung wenn die zweite Prozess nicht erzeugt wird,dann wird ein Signal händler installiert wo nach 8 sec ein Alarm zu Sohn Prozess sendet das wird dann ausgeführt nach Signal 14 von Systemcall aufgelöst ist.
Das ist alles was ich Verstanden habe ob ich überhaupt richtig verstanden habe. Ich werde mich freuen wenn einer kommentieren würde was wirklich gescheit. Ich wäre sehr dankbar, wenn ihr erklären konnte.
Ich bedanke mich im voraus
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <wait.h>
#include <errno.h>
#include <iostream.h>using namespace std;
int pidsib1;
int main (int argc, char *argv[])
{
int status, existat, pidsib2;
char ant;
char antwort, errtext;
void alhnd(int signr), alhnd1(int signr);switch (pidsib1=fork())
{
case -1:
perror(argv[0]);
cout << "Fehler bei fork"<< argv[0] << endl;
existat = 1; break;
case 0: /* nur Sohn /
execvp(argv[1],&argv[1]); / nur Sohn /
perror(argv[0]);
cout <<"Fehler beim Laden\n "<< argv[0]<< endl; / nur Sohn /
existat = 2; break; / nur Sohn /
default: / case >0 /
switch (pidsib2=fork())
{
case -1:
perror("2.fork:");
existat = 11; break;
case 0: / nur Sohn */
while (2>1) {
signal(SIGALRM,alhnd); // installiert
perror("signal1:");
if (alarm(8) == -1)
{perror("alarm");}
if (pause() == -1)
{perror("pause");}
if (kill(pidsib1, SIGSTOP) == -1)
{perror("kill-SIGSTOP:"); exit(0);}
cout << "Weiter mit beliebiger Taste\n"<< endl;
signal(SIGALRM, alhnd1);
if (alarm(5) == -1)
{perror("alarm");}
ant=getchar();
if (alarm(0) == -1)
{perror("alarm");};
if (kill(pidsib1, SIGCONT) == -1)
{perror("kill-SIGCONT:");}
}
}
if(wait(&status) < 0 || status != 0)
{perror(":Problem beim Ausfuehren ");
cout << "status " << status << endl;
existat = 3;
}
else {
cout << " Ausfuehrung o.k. !" << argv[1] << endl;
existat=0;
}
}exit(existat);
}void alhnd(int signr){
char ant; void alhnd1(int signr);cout << "Wartet auf signal:" << signr <<endl;
return;
}void alhnd1(int signr)
{
cout << "Dies war kill aus alhnd1"<< endl;
kill(0,SIGKILL);
return;
}
Liebe GrüßeMark6