äúåëðéåú
äáàåú îîçéùåú ùéîåù á÷øéàú äîòøëú 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:...