Assignment08 20208038
Assignment08 20208038
20208038
CODE:-
#include<stdio.h>
#include<signal.h>
#include<wait.h>
int stat;
int main(void){
pid_t pid=fork();
if(pid==0){
int i;
for(i=0;i<10000;i++);
kill(getpid(), SIGKILL);
}
else{
if(signal(SIGCHLD,SIG_IGN)!=SIG_IGN){
int iret;
struct sigac on sAc on;
sAc on.sa_ ags = 0;
sAc on.sa_handler = handler;
sigemptyset(&sAc on.sa_mask);
iret=sigac on(SIGCHLD,&sAc on,NULL);
}
prin ("wai ng for child to die\n");
wait(&stat);
}
}
tf
ti
ti
tf
ti
ti
ti
fl
ti
ti
ti
ti
ti
ti
2. Implement program # 4 of assignment for week # 7, using sigac on() and modify
the program to mask any other signal that appears, while the signal handler is busy
processing a signal . Hint: De ne the signal_handler in such a way, that it remains
under execu on for some me (loop may be used), when another signal gets
generated.
CODE:-
#include<stdio.h>
#include<signal.h>
int cpid;
sigset_t sSet;
prin ("%d",sig);
prin ("Signal number %d recieved\n",sig);
if(sig==SIGQUIT){
exit(0);
}
sleep(5000);
iRet = sigprocmask(SIG_UNBLOCK, &sSet, NULL);
}
int main(void){
pid_t pid=fork();
if(pid==0){
tf
tf
ti
ti
fi
ti
int i;
for(i=1;i<33;i++)
if( signal(i,SIG_IGN)!=SIG_IGN){
int iret;
struct sigac on sAc on;
sAc on.sa_ ags = 0;
sAc on.sa_handler = childhandler;
sigemptyset(&sAc on.sa_mask);
iret=sigac on(i,&sAc on,NULL);
}
while(1)
pause();
}
else{
cpid=pid;
int i;
for(i=1;i<33;i++)
if( signal(i,SIG_IGN)!=SIG_IGN){
int iret;
struct sigac on sAc on;
sAc on.sa_ ags = 0;
sAc on.sa_handler = parenthandler;
sigemptyset(&sAc on.sa_mask);
iret=sigac on(i,&sAc on,NULL);
}
while(1)
pause();
}
3. Implement a program using sigac on() and signal_set to block any of the signals SIGINT,
SIGHUP and SIGABRT. The program should also display the list of blocked/pending signals.
CODE:-
#include<stdio.h>
#include<signal.h>
#include<sys/wait.h>
ti
ti
ti
ti
ti
ti
ti
ti
fl
fl
ti
ti
ti
ti
ti
ti
ti
#include<unistd.h>
#include<stdlib.h>
int main()
{
sigset_t sset,s2;
sigemptyset(&sset);
sigaddset(&sset,SIGINT);
sigaddset(&sset,SIGHUP);
sigaddset(&sset,SIGABRT);
sigprocmask(SIG_SETMASK,&sset,NULL);
kill(getpid(),SIGINT);
kill(getpid(),SIGHUP);
kill(getpid(),SIGABRT);
sigpending(&s2);
if(sigismember(&s2,SIGINT))
prin ("SIGINT IS blocked\n");
if(sigismember(&s2,SIGHUP))
prin ("SIGHUP IS blocked\n");
if(sigismember(&s2,SIGABRT))
prin ("SIGABRT IS blocked\n");
tf
tf
tf