mohangraj
mohangraj

Reputation: 11034

Interrupted system call in C

I want to make my program sleep upto 10 seconds even the signal is occured. So, I tried the following program.

Program:

#include<stdio.h>
#include<signal.h>
#include<errno.h>
int main()
{
    printf("PID: %d\n",getpid());
    int unslept=10;
    while(unslept>0){
        unslept=sleep(unslept);
        if(errno==EINTR)
            continue;
    }
    return 0;
}

Output:

$ ./a.out 
PID: 18935
User defined signal 1
$

I expect the above program will execute 10 seconds even the signal is interrupted. I exeperiment it like, in one terminal I executed this program. And using another terminal using kill command I sent the SIGUSR1 signal to this process. But, the same problem occurs. Once the signal is passed, the program terminates. So, is there any way to execute my program upto 10 seconds without affecting any signal.

Upvotes: 7

Views: 4776

Answers (2)

user5076313
user5076313

Reputation:

You can ignore the signal. See the below example, in that example, if the SIGUSR1 signal is interrupted, it just ignore the signal using the SIG_IGN.

#include<stdio.h>
#include<signal.h>

    int main(void)
    {
            if (signal(SIGUSR1, SIG_IGN) == SIG_ERR)
                    perror("SIGUSR1");

            sleep(30);
    }

Upvotes: 2

Nishant Kumar
Nishant Kumar

Reputation: 2169

You can use signal handling mechanism. Register your method that will handle interrupt signals and just ignore it that in your function.

// signal handler
    void my_function(int sig){
      //do nothing
    }

// register signal
    signal(SIGNAL_ID, my_function);  

Upvotes: 1

Related Questions