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