äúåëðéåú äáàåú îîçéùåú ùéîåù á÷øéàú äîòøëú signal, kill  åëï ùìéèä áúâåáä ììçéöåú Ctrl-C, Ctrl-\, Ctrl-Z åëï äô÷åãåú fg, bg.

 

/* trap0.c -- Ha Ha program  */

 

#include <stdio.h>

 

void main()

{

  int i;

 

  for (i=1; i < 50; i++)

  {

    printf("Ha Ha Ha Ha \n");

    sleep(12);

  }

}

 

___________________________________________

 

mathcs11:/home4/ronn/cprogs/system > cc trap0.c

mathcs11:/home4/ronn/cprogs/system > a.out

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

^Z

Suspended

mathcs11:/home4/ronn/cprogs/system > fg

a.out

Ha Ha Ha Ha

^Z

Suspended

mathcs11:/home4/ronn/cprogs/system > bg

[1]    a.out &

Ha Ha Ha Ha

mathcs11:/home4/ronn/cprogs/system > Ha Ha Ha Ha

ps | grep a.out

 17490 pts/16  0:00 a.out

 19876 pts/16  0:00 grep a.out

mathcs11:/home4/ronn/cprogs/system > Ha Ha Ha Ha

kill -STOP 17490

[1]  + Suspended (signal)     a.out

mathcs11:/home4/ronn/cprogs/system > kill -CONT 17490

mathcs11:/home4/ronn/cprogs/system > Ha Ha Ha Ha

Ha Ha Ha Ha

kill -TERM 17490

mathcs11:/home4/ronn/cprogs/system >

 

/* trap1.c -- traps a signal - version 1.0  */

 

#include <stdio.h>

#include <signal.h>

 

void main()

{

  int i;

  void alter();

 

  signal(SIGINT, alter);

  for (i=1; i < 50; i++)

  {

    printf("Ha Ha Ha Ha \n");

    sleep(2);

  }

}

 

void alter()

{

  printf("I can't stop!\n");

}

 

_________________________________________________________________

 

mathcs11:/home4/ronn/cprogs/system > cc trap1.c

mathcs11:/home4/ronn/cprogs/system > a.out

Ha Ha Ha Ha

Ha Ha Ha Ha

^CI can't stop!

Ha Ha Ha Ha

^C

mathcs11:/home4/ronn/cprogs/system >

 

_________________________________________________

 

/* trap2.c -- traps a signal repeatedly version 1.1  */

 

#include <stdio.h>

#include <signal.h>

void main()

{

  int i;

  void alter();

 

  signal(SIGINT, alter);

  for (i=1; i < 50; i++)

  {

    printf("Ha Ha Ha Ha \n");

    sleep(2);

  }

}

 

void alter()

{

  signal(SIGINT, alter);

  printf("I won't stop!\n");

}

 

________________________________________________________

 

mathcs11:/home4/ronn/cprogs/system > cc trap2.c

mathcs11:/home4/ronn/cprogs/system > a.out

Ha Ha Ha Ha

^CI won't stop!

Ha Ha Ha Ha

Ha Ha Ha Ha

^CI won't stop!

Ha Ha Ha Ha

^\Quit (core dumped)

mathcs11:/home4/ronn/cprogs/system > rm core

mathcs11:/home4/ronn/cprogs/system >

 

/* trap5.c -- traps a signal - version 3.0  */

 

#include <stdio.h>

#include <signal.h>

 

void main()

{

  int i, pid;

  void alter();

 

  switch( pid = fork() )

  {

   case -1:

    perror("fork");

    exit(1);

   case 0:

      signal(SIGINT, alter);

      for (i=1; i < 50; i++)

      {

        printf("Ha Ha Ha Ha \n");

        sleep(2);

       } /* for */

  } /* switch */

 

  /* parant process */

  sleep(6);

  kill(pid,SIGINT);

  sleep(6);

  kill(pid,SIGQUIT);

 

}

 

void alter()

{

  signal(SIGINT, alter);

  printf("I won't stop!\n");

}

 

___________________________________________________________

 

mathcs11:/home4/ronn/cprogs/system > cc trap5.c

mathcs11:/home4/ronn/cprogs/system > a.out

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

I won't stop!

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

mathcs11:/home4/ronn/cprogs/system >

 

 

/* trap6.c -- traps a signal - version 3.0  */

 

#include <stdio.h>

#include <signal.h>

 

void main()

{

  int pid;

 

  switch( pid = fork() )

  {

   case -1: /* No new process */

    perror("fork");

    exit(1);

 

   case 0:  /*child process */

    execl("./trap2","trap2", NULL);

    perror("execl"); /* We should not be here */

    exit(1);

  } /* switch */

 

  /* parant process only */

  sleep(6);

  kill(pid,SIGINT);

  sleep(6);

  kill(pid,SIGKILL);

 

} /* main */

 

________________________________________________

mathcs11:/home4/ronn/cprogs/system > cc trap2.c -o trap2

mathcs11:/home4/ronn/cprogs/system > cc trap6.c

mathcs11:/home4/ronn/cprogs/system > a.out

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

I won't stop!

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

mathcs11:/home4/ronn/cprogs/system >

 

/* trap7.c -- traps a signal - version 4.0  */

 

#include <stdio.h>

#include <signal.h>

 

void main()

{

  int pid;

 

  pid = getpid();

  switch( fork() )

  {

   case -1: /* No new process */

    perror("fork");

    exit(1);

 

   case 0:  /* Child process */     

    sleep(6);

    kill(pid,SIGINT);

    sleep(6);

    kill(pid,SIGKILL);

    exit(0);

  } /* switch */

 

  /* Parant process */

    execl("./trap2","trap2", NULL);

    perror("execl"); /* We should not be here */

    exit(1);

 

} /* main */

 

___________________________________________________________

 

 

mathcs11:/home4/ronn/cprogs/system > cc trap2.c -o trap2

mathcs11:/home4/ronn/cprogs/system > cc trap7.c

mathcs11:/home4/ronn/cprogs/system > a.out

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

I won't stop!

Ha Ha Ha Ha

Ha Ha Ha Ha

Ha Ha Ha Ha

Killed

mathcs11:/home4/ronn/cprogs/system >

 

 

äúåëðéú äáàä îîçéùä ùìéçú ñéâðì ì÷áåöú úäìéëéí, úåê ùéîåù á-setgrp, kill

 

 

  #include <unistd.h>

 

  int setpgid(

          pid_t process_id,

          pid_t process_group_id);

 

 

   pid_t setpgrp(void);

 

_________________________________________________________

 

 

/* group4.c - group demo.  */

 

#include <stdio.h>

#include <signal.h>

#include <stdlib.h>

#include <unistd.h>

 

void sys_err(char str[])

{

  perror(str);

  exit(1);

} /*  sys_err */

 

void main()

{

  int grpid, new_grppid, old_grppid, i;

 

  grpid = getpgrp();

 

  printf("pid = %d\n", getpid());

  printf("grpid = %d\n\n", grpid);

 

  switch(fork())

  {

   case -1:

      sys_err("fork");

   case 0:

    for (i=1; i < 50; i++)

     {

       printf("Child 1:... \n");

       sleep(2);

     } /* for */

    exit(0);

 

  } /* switch */

 

  switch(fork())

  {

   case -1:

      sys_err("fork");

   case 0:

    for (i=1; i < 50; i++)

     {

       printf("Child 2:... \n");

       sleep(2);

     } /* for */

    exit(0);

 

  } /* switch */

 

 

  switch(fork())

  {

   case -1:

      sys_err("fork");

   case 0:

     old_grppid = getpgrp();

     if (setpgrp() == -1)

            sys_err("setpgrp");

 

     new_grppid = getpgrp();

 

    printf("Child 3:pid = %d\n", getpid());

    printf("old_grppid = %d, new_grppid = %d\n\n",

                               old_grppid, new_grppid);

 

    for (i=1; i < 10; i++)

     {

       printf("Child 3:... \n");

       sleep(2);

     } /* for */

    exit(0);

 

  } /* switch */

 

 

   for (i=0; i < 5; i++)

     {

       printf("Parent Process:... \n");

       sleep(2);

     } /* for */

 

   kill(0, SIGTERM);

 

 

} /* main */

 

_______________________________________________

 

study:/usr/users/staff/ronn/system > cc group4.c

study:/usr/users/staff/ronn/system > ./a.out

pid = 25896

grpid = 25896

 

Child 1:...

Child 2:...

Parent Process:...

Child 3:pid = 24383

old_grppid = 25896, new_grppid = 24383

 

Child 3:...

Child 1:...

Child 2:...

Parent Process:...

Child 3:...

Child 1:...

Child 2:...

Parent Process:...

Child 3:...

Child 1:...

Child 2:...

Parent Process:...

Child 3:...

Child 1:...

Child 2:...

Parent Process:...

Child 3:...

Child 1:...

Child 2:...

Child 3:...

Terminated

study:/usr/users/staff/ronn/system > Child 3:...

Child 3:...

Child 3:...