Linux Signal Handling

  Home  Operating System Linux  Linux Signal Handling


“Signal Handling frequently Asked Questions in various Linux Signal Handling job Interviews by interviewer. The set of questions here ensures that you offer a perfect answer posed to you. So get preparation for your new job hunting”



21 Linux Signal Handling Questions And Answers

6⟩ What happnes as the signal SIGINT hits the current process in the program? #include<stdio.h> #include<signal.h> void response (int); void response (int sig_no) { printf("Linuxn"); } int main() { struct sigaction act; act.sa_handler = response; act.sa_flags = 0; sigemptyset(&act.sa_mask); sigaction(SIGINT,&act,0); while(1){ printf("googlen"); sleep(1); } return 0; } a) the process terminates b) the string "Linux" prints c) the string "Linux" prints and then process terminates d) none of the mentioned

b) the string "Linux" prints

Output:

[root@localhost sigaction]# gcc -o san san.c

[root@localhost sigaction]# ./san

google

google

google

^CLinux

google

google

^CLinux

google

^Z

[7]+ Stopped ./san

[root@localhost google]#

 226 views

7⟩ This program will print #include<stdio.h> #include<signal.h> #include<unistd.h> void response (int); void response (int sig_no) { printf("%s is workingn",sys_siglist[sig_no]); } int main() { alarm(5); sleep(50); printf("googlen"); signal(SIGALRM,response); return 0; } a) "google" b) "Alarm clock" c) nothing d) none of the mentioned

b) "Alarm clock"

Explanation:After 5 seconds of the execution of this program, the signal SIGALRM hits the process and handler executes.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

Alarm clock

[root@localhost google]#

 189 views

8⟩ What is the output of this program? #include<stdio.h> #include<signal.h> #include<stdlib.h> void response (int); void response (int sig_no) { printf("%sn",sys_siglist[sig_no]); printf("This is singal handlern"); } int main() { pid_t child; int status; child = fork(); switch (child){ case -1 perror("fork"); exit (1); case 0 kill(getppid(),SIGKILL); printf("I am an orphan process because my parent has been killed by men"); printf("Handler failedn"); break; default signal(SIGKILL,response); wait(&status); printf("The parent process is still aliven"); break; } return 0; } a) the child process kills the parent process b) the parent process kills the child process c) handler function executes as the signal arrives to the parent process d) none of the mentioned

a) the child process kills the parent process

Explanation:

The SIGKILL signal can not be handled by singal handler function.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

Killed

[root@localhost google]# I am an orphan process because my parent has been killed by me

Handler failed

[root@localhost google]#

 192 views

9⟩ Which one of the following is not true about this program? #include<stdio.h> #include<signal.h> void response (int); void response (int signo) { printf("%sn",sys_siglist[signo]); signal(SIGSEGV,SIG_IGN); } int main() { signal (SIGSEGV,response); char *str; *str = 10; return 0; } a) kernel sends SIGSEGV signal to a process as segmentation fault occurs b) in this process signal handler will execute only one time of recieving the signal SIGSEGV c) both (a) and (b) d) none of the mentioned

d) none of the mentioned

Explanation:

In this process the segmentation fault occurs because the memory is not allocated to the pointer *str.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

Segmentation fault

Segmentation fault (core dumped)

[root@localhost google]#

 225 views

10⟩ What is the output of this program? #include<stdio.h> #include<signal.h> void response (int); void response (int sig_no) { printf("%sn",sys_siglist[sig_no]); } int main() { pid_t child; int status; child = fork(); switch(child){ case -1 perror("fork"); case 0 break; default signal(SIGCHLD,response); wait(&status); break; } } a) this program will print nothing b) this program will print "Child Exited" c) segmentation fault d) none of the mentioned

b) this program will print "Child Exited"

Explanation:

The child process sends SIGCHILD signal to its parent as it terminates.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

Child exited

[root@localhost google]#

 222 views

11⟩ In this program #include<stdio.h> #include<signal.h> #include<stdlib.h> int main() { pid_t child; child=fork(); switch(child){ case -1 perror("fork"); exit(1); case 0 while(1){ printf("Child Processn"); sleep(1); } break; default sleep(5); kill(child,SIGINT); printf("The child process has been killed by the parent processn"); break; } return 0; } a) the child process kills the parent process b) the parent process kills the child process c) both the processes are killed by each other d) none of the mentioned

b) the parent process kills the child process

Explanation:

The parnet process kills the child by sending a signal.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

Child Process

Child Process

Child Process

Child Process

Child Process

The child process has been killed by the parent process

[root@localhost google]#

 178 views

12⟩ What will print as the SIGINT signal hits the running process of this program? #include<stdio.h> #include<stdlib.h> #include<signal.h> void response (int); void response (int sig_no) { printf("%s",sys_siglist[sig_no]); } int main() { signal(SIGINT,response); while(1){ printf("googlen"); sleep(1); } return 0; } a) Interrupt b) Stop c) Terminate d) none of the mentioned

a) Interrupt

Explanation:

The messages associated with signals can be access by the function sys_siglist().

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

google

google

google

^CInterruptgoogle

google

^CInterruptgoogle

google

^CInterruptgoogle

google

google

^Z

[4]+ Stopped ./san

[root@localhost google]#

 249 views

13⟩ What happens as the SIGINT signal hits the running process of this program? #include<stdio.h> #include<signal.h> #include<stdlib.h> int main() { pid_t child; signal(SIGINT,SIG_IGN); child=fork(); switch(child){ case -1 perror("fork"); exit(1); case 0 while(1){ printf("Child Processn"); sleep(1); } break; default while(1){ printf("Parent Processn"); pause(); } break; } return 0; } a) child process terminates b) parent process terminates c) both child and parent process ignores the signal d) none of the mentioned

c) both child and parent process ignores the signal

Explanation:

If a process ignores a signal then by default its child also ignores that signal.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

Parent Process

Child Process

Child Process

^CChild Process

^CChild Process

^CChild Process

^Z

[3]+ Stopped ./san

[root@localhost signal]#

 202 views

14⟩ What will happen if we press "Ctrl+c" key two times after running this program? #include<stdio.h> #include<signal.h> void response(int); void response(int sig_no) { printf("Linuxn"); signal(SIGINT,SIG_DFL); } int main() { signal(SIGINT,response); while(1){ printf("googlen"); sleep(1); } return 0; } a) process will terminate in the first time b) process will terminate in the second time c) process will never terminate d) none of the mentioned

c) process will never terminate

Explanation:

According to the signal handler function of this program as the SIGINT signal arrives second time, the signal performs its default operation i.e. termination of the process.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

google

google

^CLinux

google

^C

[root@localhost google]#

 206 views

15⟩ What will happen as we press the "Ctrl+c" key after running this program? #include<stdio.h> #include<signal.h> void response (int); void response (int sig_no) { printf("Linuxn"); } int main() { signal(SIGINT,response); while(1){ printf("googlen"); sleep(1); } return 0; } a) the string "Linux" will print b) the process will be terminated after printing the string "Linux" c) the process will terminate d) none of the mentioned

a) the string "Linux" will print

Explanation:

The signal handler function "response" executes after recieving the signal SIGINT.

Output:

[root@localhost google]# gcc -o san san.c

[root@localhost google]# ./san

google

google

google

^CLinux

google

google

^CLinux

google

google

^CLinux

google

^Z

[2]+ Stopped ./san

[root@localhost google]#

 234 views