32 lines
571 B
C
32 lines
571 B
C
#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;
|
|
}
|