By liran bh | 5/16/2016 | Linux User Space

Regular Signal Example

#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
 
#define SIG_STOP_CHILD SIGUSR1 
 
int main()
{
pid_t pid;
sigset_t newmask, oldmask;
 
    if ((pid = fork()) == 0) {    /*Child*/
        struct sigaction action; 
        void catchit();
 
        sigemptyset(&newmask); 
        sigaddset(&newmask, SIG_STOP_CHILD); 
        sigprocmask(SIG_BLOCK, &newmask, &oldmask); 
 
        action.sa_flags = 0; 
        action.sa_handler = catchit;
 
        if (sigaction(SIG_STOP_CHILD, &action, NULL) == -1) { 
            perror("sigusr: sigaction");
            _exit(1);
        }
        sigsuspend(&oldmask); 
    }
    else {                             /* Parent */
        int stat;
        sleep(1); 
        kill(pid, SIG_STOP_CHILD); 
        pid = wait(&stat); 
        printf("Child exit status = %d\n", WEXITSTATUS(stat));
     _exit(0);
     }
     return 0;
}
void catchit(int signo) 
{
       printf("Signal %d received from parent\n", signo);
       _exit(0);
}

{{CommentsModel.TotalCount}} Comments

Your Comment

{{CommentsModel.Message}}

Recent Stories

Top DiscoverSDK Experts

User photo
3355
Ashton Torrence
Web and Windows developer
GUI | Web and 11 more
View Profile
User photo
3220
Mendy Bennett
Experienced with Ad network & Ad servers.
Mobile | Ad Networks and 1 more
View Profile
User photo
3060
Karen Fitzgerald
7 years in Cross-Platform development.
Mobile | Cross Platform Frameworks
View Profile
Show All
X

Compare Products

Select up to three two products to compare by clicking on the compare icon () of each product.

{{compareToolModel.Error}}

Now comparing:

{{product.ProductName | createSubstring:25}} X
Compare Now