'Child not Responding

Hello I'm having issues with sending signals from the father process to the child process. The Child doesn't respond to the signed sent by the father process:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
pid_t pid;
pid = fork();

if(pid > 0) {
printf("Hello, my son!\n");
    sleep(5); /* Sleep for 5 seconds... */
    kill(pid, SIGUSR1);
    printf("Goodbye, son!\n");
    }
else {
    printf("Son is running\n");
    pause(); /* Wait for some signal... */
    printf("I received the signal!");
    }
}

The son doesn't received the signal it only says it's running here is the output: output



Solution 1:[1]

The default behavior when SIGUSR1 is received is termination, so the child never prints the message. To handle the signal, you can use sigaction:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

void handle(int sig, siginfo_t *i, void *v) { return; }

int
main(void)
{
        pid_t pid = fork();

        if( pid > 0 ){
                printf("Hello, my child!\n");
                sleep(1); /* Sleep for 1 second. */
                kill(pid, SIGUSR1);
                printf("Goodbye, child!\n");
        } else {
                struct sigaction act;
                memset(&act, 0, sizeof act);
                act.sa_sigaction = handle;

                if( sigaction( SIGUSR1, &act, NULL ) ){
                        perror("sigaction");
                        exit(1);
                }

                printf("Child is running\n");
                pause(); /* Wait for some signal... */
                printf("I received the signal!\n");
        }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 William Pursell