| #if defined(__linux__) | |
| #define _XOPEN_SOURCE 500 /* for CLD_EXITED */ | |
| #endif | |
| #include <assert.h> | |
| #include <signal.h> | |
| #include <stdio.h> | |
| #include <unistd.h> | |
| #include <sys/wait.h> | |
| void handler(int signo) { | |
| printf("SIGCHLD\n"); | |
| } | |
| int main() { | |
| void *ret = signal(SIGINT, handler); | |
| assert (ret != SIG_ERR); | |
| pid_t child_pid = fork(); | |
| assert (child_pid != -1); | |
| if (child_pid == 0) { | |
| sleep(1); | |
| _exit(14); | |
| } | |
| printf("signo = %d\n", SIGCHLD); | |
| printf("code = %d\n", CLD_EXITED); | |
| printf("child_pid = %d\n", child_pid); | |
| printf("uid = %d\n", getuid()); | |
| pid_t waited = wait(NULL); | |
| assert(waited == child_pid); | |
| return 0; | |
| } |