Thank you. Now I get it.
Hey, I have two more questions. I was trying sigaction before fork(), but I see some unexpected results!
1. I trigger SIGINT signal only once using kill function. I expect this to trigger respective signal handler and do the operation. But even if I am sending SIGINT only once, I am getting "Signal processed OKay" printed twice! Shouldn't this be printed only once as I am sending SIGINT only once?
Output :
Code:
Signal processed OKay 7006 0 Success SIGINT signal caught!!
Signal processed OKay 7006
Source code :
Code:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
static void sig_usr(int signo){
if(signo == SIGINT){
char buf[] = "SIGINT signal caught!!\n";
int wr = strlen(buf);
write(STDOUT_FILENO, buf, wr);
}
return;
}
int main(void)
{
pid_t pid, ppid;
ppid = getpid();
struct sigaction sig;
sigemptyset(&sig.sa_mask);
sig.sa_flags = 0;
sig.sa_handler = sig_usr;
if(sigaction(SIGINT,&sig,NULL) == 0)
printf("Signal processed OKay ");
sleep(10);
printf("%d ", ppid);
if((pid = fork()) == 0)
{ //Child
kill(ppid, SIGINT);
}
}
2. Secondly, I am facing some problems when I try to send 2 SIGINT signals one after the other continuously from child process! i.e, when another kill() function is used after the first one in above code. The result I expected was two "SIGINT signal caught!!" messages. But I am getting only one instead.
In general, if I am sending signals of same kind continuously of same kind from child to parent, anything in particular I need to do?
Sorry for the elongated mail. Please help.
Regards!
|