1#include <pthread.h>
2#include <signal.h>
3#include <stdlib.h>
4#include <stdio.h>
5#include <string.h>
6#include <unistd.h>
7#include <sys/wait.h>
8
9void *slavethread(void *arg)
10{
11    while (1)
12        pause();
13}
14
15int main(int argc, char **argv)
16{
17    int i;
18    for (i = 0; i < 10; i++) {
19        pthread_t slave;
20        if (pthread_create(&slave, 0, slavethread, 0)) {
21            perror("pthread_create");
22            exit(2);
23        }
24    }
25
26    pid_t pid = getpid();
27    switch (fork()) {
28        case 0: // child
29            sleep(2); // Should be enough to ensure (some) threads are created
30            for (i = 0; i < 20 && kill(pid, SIGTERM) == 0; i++)
31                ;
32            exit(0);
33        case -1:
34            perror("fork");
35            exit(4);
36    }
37
38    while (1)
39        pause();
40    fprintf(stderr, "strange, this program is supposed to be killed!\n");
41    return 1;
42}
43