Signals in C

A signal is an asynchronous event which is delivered to a process.

Types:

SIGKILL, SIGSTOP and User Defined Signals,SIGALRM

Prototype:
void (*signal(int signo, void (*func )(int)))(int);

Send a signal to a process:
#include<signal.h>
int kill(pid_t pid,int signo);//is not kill,but send
pid>0:send to one process pid
pid=0:send to all processes whose process group ID equals
the sender's pid.(parent kills all children)

command:
$kill -SIGUSR1 4481

Reacting to a signal:
//after receiving signal SIDUSR1,will execute function skip
void skip(){
printf("I have received signal 1 %d\n",share++);
//signal(SIGUSR1,print);
return;
}
signal(SIGUSR1,skip);

-pause()
suspends the calling process until a signal is caught
it returns only after a signal handler has returned
Return Value
pause() only returns when a signal was caught and the signal-catching function returned. In this
case pause() returns -1, and errno is set to EINTR.
 #include <sys/types.h>
  #include <unistd.h>
  #include <signal.h>
  #include <setjmp.h>
  #include <lcjmp.h>
  #include <stdio.h>

  void breakout(int);
  jmp_buf jbuf;
  int jcode;

  main()
  {
        /* Establish SIGINT handling.    */
     onjmp(jbuf, jcode, done);
     signal(SIGINT, &breakout);
     puts("We are now pausing for a message from our sponsor.");
     puts("Enter Control C or attn to continue.");
     pause();

  done:
     puts("And now back to our program.");
     return;
  }

     /* SIGINT handler gets out of wait. */
  void breakout(int signum)
  {
     puts("Try SAS/C today, the choice of the new generation!");
     longjmp(jbuf, 1);
  }

alarm()
set an alarm timer that will generate a SIGALRM signal after a 
specified number of seconds
can use as following:
//before 6seconds,executing as order,probably doing while loop
after 6 seconds,generate signal-SIGALRM, after receiving,execute 
the funct instead of going on looping
signal(SIGALRM,funct)
alarm(6);
while(1){
}


你可能感兴趣的:(command,children,receiving)