QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 636|回复: 3

让我极其郁闷了几天的问题!!!大牛们帮忙看看,不胜感激!!

[复制链接]
发表于 2004-7-21 14:42:02 | 显示全部楼层 |阅读模式
下面是我的一个测试子程序与父程序共享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");
}
发表于 2004-7-21 16:39:54 | 显示全部楼层
sig caught
killed



in
killed
和楼主的不一样?
回复

使用道具 举报

 楼主| 发表于 2004-7-21 17:18:51 | 显示全部楼层
也许跟机器配置有点关系。我又测试了一下,前面哪个所谓的正确结果也是“运气好”的结果。
刚才我又测试,如果采用静态连接的话,一切运行正常了,这个结果使我越发的糊涂了。
回复

使用道具 举报

发表于 2004-7-21 19:37:55 | 显示全部楼层
relocation error: ./a5.out: symbol , version GLIBC_2.0 not defined in file libc.so.6 with link time reference
这是 gcc -Wall -g 的信息。说明有一个动态链接时的重定位问题(所以你静态链接可以)。这应该是一个版本不兼容问题。可能链接的glibc2.0,但rh默认glibc2.2。 我想升级gcc可能可以解决。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 20:53 , Processed in 0.077529 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表