16.05.2015 Views

Working with the Unix OS

Working with the Unix OS

Working with the Unix OS

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Processes II<br />

}<br />

while (!alarmflag)<br />

pause(); /* wait for signal */<br />

printf("loop ends due to alarm signal\n");<br />

void alarmhandler()<br />

{<br />

printf("alarm clock signal was received\n");<br />

alarmflag = 1;<br />

}<br />

/* critical.c - protecting critical code */<br />

#include <br />

#include <br />

main()<br />

{<br />

int (*oldHandler)();<br />

}<br />

oldHandler = signal (SIGINT, SIG_IGN);<br />

printf ("protected from ^C now\n");<br />

sleep(3);<br />

signal (SIGINT, oldHandler); /* restore old handler */<br />

/* limit.c - death of children */<br />

#include <br />

#include <br />

int delay;<br />

void childhandler();<br />

main(int argc, char *argv[])<br />

{<br />

int pid;<br />

signal(SIGCHLD, childhandler);/* signal handler */<br />

pid = fork(); /* duplicate process */<br />

if (pid == 0){ /* child */<br />

execvp(argv[2],&argv[2]); /* execute command */<br />

fprintf(stderr, "limit - should never execute\n");<br />

}<br />

else{ /* parent */<br />

sscanf(argv[1], "%d", &delay);<br />

sleep (delay);<br />

printf ("child %d exceeded limit and is killed\n", pid);<br />

kill(pid, SIGINT); /* kill child */<br />

}<br />

}<br />

limit 5 ls -1<br />

limit 4 sleep 40<br />

/* pulse.c - suspending and resuming processes */<br />

#include <br />

#include <br />

main()<br />

{<br />

int pid1, pid2;<br />

if((pid1=fork())== 0){ /* first child */<br />

125

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!