Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Please find the complete program for the question below.
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <errno.h>
- #include <unistd.h> /* psignal */
- #include <sys/types.h> /* waitpid */
- #include <sys/wait.h> /* waitpid */
- #define N 2
- int main() {
- int status, i;
- pid_t pid[N], retpid;
- /* Parent creates N children */
- for(i = 0; i < N; i++) {
- if((pid[i] = fork()) == 0) { /* child */
- strcpy("Hello", "World"); /* Writing on read-only location. It creates SIGSEGV */
- exit(100 + i);
- }
- }
- /* Parent reaps N children in order */
- i = 0;
- while ((retpid = waitpid(pid[i++], &status, 0)) > 0) {
- if(WIFEXITED(status))
- printf("child %d terminated normally with exit status=%d\n", retpid, WEXITSTATUS(status));
- else if(WIFSIGNALED(status)) { /* Exited with a signal */
- printf("child %d terminated by signal %d: \n", retpid, SIGSEGV);
- psignal(WTERMSIG(status), NULL);
- }
- else
- printf("child %d terminated abnormally \n", retpid);
- }
- /* The only normal termination is if there are no more children */
- if(errno != ECHILD)
- printf("waitpid error");
- exit(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement