Probleme mit dem senden signal-zu-Kind-Prozess in C

Habe ich versucht herauszufinden, ob dies möglich ist, die Art, wie ich es getan habe oder nicht. Dieses Programm soll die Gabel einen untergeordneten Prozess, Schleifen-Druck auf STDOUT, und die Eltern sollten Sie exit, um die Rückkehr der terminal-Eingabeaufforderung. Das Kind sollte dann warten, für die SIGINT zu sagen, Wann es zu schließen. Aber ich erinnere mich gelesen zu haben, dass die SIGINT ist nur zu senden, um Prozesse in den Vordergrund, was erklärt, warum mein verlassenes Kind gar nicht betroffen ist, indem Sie STRG+C. gibt es eine Möglichkeit, entweder das verlassene Kind zu empfangen ein signal aus dem terminal, oder ein system-Aufruf im terminal, um es in den Vordergrund, wo es empfangen kann SIGINT? Oder ist meine Suche hoffnungslos?

Code:

#include  <stdio.h>
#include  <unistd.h>
#include  <stdlib.h>
#include  <signal.h>
#include  <sys/wait.h>
#include  <sys/types.h>

/* signal handler for the child process */
void catchInt (int signum)
{
 printf("\nMy sincerest apologies, master\n");
    exit(0);
}

/* signal handler for the parent process */
void ignoreInt (int signum)
{
 /* prevent any extra output from being printed */
 fflush(stdout); 
 /* wait for child to apologize before replying */
 wait(NULL);
 printf("You're welcome\n");
 exit(0);
}

/* signal handler for the child's alarm */
void catchAlarm (int signum)
{
 printf("It's great to be alive\n");
 /* reset the alarm */
 signal(SIGALRM, catchAlarm);
 alarm(3);
}

int main () {

 pid_t  pid;

 /* fork process */
 pid = fork();
 if (pid < 0) /* error handler */ 
 {   
  fprintf(stderr, "Fork Failed");
  exit(-1);
 }

 /* child */
 else if (pid == 0) 
 { 
  printf("It's great to be alive\n");
  /* catch SIGINT and handle as the child should */
  signal(SIGINT, catchInt);
  /* catch SIGALRM being sent by alarm() */
  signal(SIGALRM, catchAlarm);
  /* set alarm for 3 seconds */
  alarm(3);
  for ( ;; )
  {
   printf("I have 42001 children and not one comes to visit\n");
   usleep(500000);
  }   
 }

 /* parent */
 else 
 {
  /* exit to abandon child process in the background */
  exit(0);
 }

 return(0);
}
InformationsquelleAutor JKomusin | 2010-09-23
Schreibe einen Kommentar