newlib: add 201-signals (broken as no default action occurs in newlib)
This commit is contained in:
parent
cf974abe0e
commit
47573e2122
@ -30,9 +30,9 @@ main() {
|
|||||||
signal(SIGINT,sigint);
|
signal(SIGINT,sigint);
|
||||||
signal(SIGQUIT, sigquit);
|
signal(SIGQUIT, sigquit);
|
||||||
|
|
||||||
|
printf("\nChild going to loop...\n\n");
|
||||||
close(p[1]);
|
close(p[1]);
|
||||||
close(p[0]);
|
close(p[0]);
|
||||||
printf("\nChild going to loop...\n\n");
|
|
||||||
for(;;); /* loop for ever */
|
for(;;); /* loop for ever */
|
||||||
}
|
}
|
||||||
else /* parent */
|
else /* parent */
|
||||||
|
65
qa/lib/newlib/201-signals.c
Normal file
65
qa/lib/newlib/201-signals.c
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
void sighup(); /* routines child will call upon sigtrap */
|
||||||
|
void sigint();
|
||||||
|
void sigquit();
|
||||||
|
|
||||||
|
int
|
||||||
|
main() {
|
||||||
|
int pid, p[2], w, status, sig = 0;
|
||||||
|
char dummy[1];
|
||||||
|
|
||||||
|
/* get child process */
|
||||||
|
|
||||||
|
if(pipe(p)){
|
||||||
|
perror("pipe");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if ((pid = fork()) < 0) {
|
||||||
|
perror("fork");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pid == 0) {
|
||||||
|
printf("\nI am the new child!\n\n");
|
||||||
|
close(p[1]);
|
||||||
|
close(p[0]);
|
||||||
|
for(;;); /* loop for ever */
|
||||||
|
}
|
||||||
|
else /* parent */
|
||||||
|
{
|
||||||
|
close(p[1]);
|
||||||
|
read(p[0], &dummy, 1);
|
||||||
|
close(p[0]);
|
||||||
|
printf("\nPARENT: sending SIGQUIT\n\n");
|
||||||
|
kill(pid,SIGQUIT);
|
||||||
|
do {
|
||||||
|
w = waitpid(pid, &status, WUNTRACED);
|
||||||
|
if (w == -1) {
|
||||||
|
perror("waitpid");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (WIFEXITED(status)) {
|
||||||
|
printf("exited, status=%d\n", WEXITSTATUS(status));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
} else if (WIFSIGNALED(status)) {
|
||||||
|
sig = WTERMSIG(status);
|
||||||
|
if(sig == SIGQUIT){
|
||||||
|
printf("killed by SIGQUIT\n");
|
||||||
|
}else{
|
||||||
|
printf("killed by signal %d\n", sig);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
} else if (WIFSTOPPED(status)) {
|
||||||
|
printf("stopped by signal %d\n", WSTOPSIG(status));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
} while (!WIFEXITED(status) && !WIFSIGNALED(status));
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
}
|
@ -35,7 +35,8 @@
|
|||||||
"020-waitpid.c",
|
"020-waitpid.c",
|
||||||
"100-files.c",
|
"100-files.c",
|
||||||
"101-files.c",
|
"101-files.c",
|
||||||
"200-signals.c"
|
"200-signals.c",
|
||||||
|
"201-signals.c"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"NewlibTestsuite": {
|
"NewlibTestsuite": {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user