|
下面是我的一个测试子程序与父程序共享sighandler
在函数threadFunction中只去掉第一条打印语句
程序输出结果是:
sig cautht
Killed
保留那条打印语句正确结果是:
in
sig cautht
这个到底是怎么一回事?
环境是gcc, linux2.4, ia32.
/****************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/signal.h>
#include <sched.h>
#include <fcntl.h>
#include <string.h>
char stack[1024];
int __clone(int (*fn) (void *arg), void *child_stack, int flags, void *arg);
void sighandler(int signo);
int threadFunction()
{
printf("in\n");
raise(SIGUSR1);
exit(1);
}
int main(void)
{
pid_t pid;
if (signal(SIGUSR1, sighandler) == SIG_ERR) {
perror("signal");
exit(-1);
}
pid = __clone(threadFunction, (char *)&stack[1024], SIGCHLD | CLONE_SIGHAND | CLONE_VM, 0);
if (pid < 0) {
perror("clone");
exit(-1);
}
if (waitpid(pid, NULL ,0) != pid) {
perror("waitpid");
exit(-1);
}
exit(0);
}
void sighandler(int signo)
{
printf("sig cautht\n");
} |
|