blob: f619ea34efd418d676904f8394db9650e6c87683 [file] [log] [blame]
/*
Test assertion #21 by verifying that adding a sigaction for SIGCHLD
with the SA_NOCLDWAIT bit set in sigaction.sa_flags will result in
a child process not transforming into a zombie after death.
*/
#define _XOPEN_SOURCE 600
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
#include "posixtest.h"
void handler(int signo)
{
printf("Caught SIGCHLD\n");
}
int main()
{
/* Make sure this flag is supported. */
#ifndef SA_NOCLDWAIT
fprintf(stderr,"SA_NOCLWAIT flag is not available for testing\n");
return PTS_UNSUPPORTED;
#endif
struct sigaction act;
act.sa_handler = handler;
act.sa_flags = SA_NOCLDWAIT;
sigemptyset(&act.sa_mask);
sigaction(SIGCHLD, &act, 0);
if (fork() == 0) {
/* child */
return 0;
} else {
/* parent */
int s;
if (wait(&s) == -1 && errno == ECHILD) {
printf("Test PASSED\n");
return PTS_PASS;
}
}
printf("Test FAILED\n");
return PTS_FAIL;
}