| #include <pthread.h> |
| #include <signal.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include <sys/wait.h> |
| |
| void *slavethread(void *arg) |
| { |
| while (1) |
| pause(); |
| } |
| |
| int main(int argc, char **argv) |
| { |
| int i; |
| for (i = 0; i < 10; i++) { |
| pthread_t slave; |
| if (pthread_create(&slave, 0, slavethread, 0)) { |
| perror("pthread_create"); |
| exit(2); |
| } |
| } |
| |
| pid_t pid = getpid(); |
| switch (fork()) { |
| case 0: // child |
| sleep(2); // Should be enough to ensure (some) threads are created |
| for (i = 0; i < 20 && kill(pid, SIGTERM) == 0; i++) |
| ; |
| exit(0); |
| case -1: |
| perror("fork"); |
| exit(4); |
| } |
| |
| while (1) |
| pause(); |
| fprintf(stderr, "strange, this program is supposed to be killed!\n"); |
| return 1; |
| } |