尽管从pthread_create返回成功,但是没有创建线程

问题描述

我已经在HP-UX甚至SUSE上编写了很多线程代码,并且效果很好。但这在Red Hat上不起作用。这是我的机器:

Linux版本3.10.0-1062.18.1.el7.x86_64(Red Hat 4.8.5-39)

Red_Hat_Enterprise_Linux-Release_Notes-7-zh-CN-7-2.el7.noarch

redhat-release-server-7.7-10.el7.x86_64

我编写了一个简单的测试程序thr_ex.c:

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>



void *funny(void *);



void *funny(s)
void *s;

{ 
    int fd;


    fd = creat("/tmp/funny_func",0600);

    write(fd,s,strlen((char *) s));

    close(fd);
}



int main()

{
    int                 return_value;
    pthread_t           thread_id;
    pthread_attr_t      thread_attr;


    pthread_attr_init(&thread_attr);
    pthread_attr_setscope(&thread_attr,PTHREAD_SCOPE_SYSTEM);
    pthread_attr_setdetachstate(&thread_attr,PTHREAD_CREATE_DETACHED);

    return_value = pthread_create(&thread_id,&thread_attr,funny,(void *) "Here I am\n");

    printf("Return value == %d\n",return_value);
    printf("Thread id    == %hu\n",thread_id);

    exit(0);
} /* End main. */

编译,构建:

gcc -pthread -s -o thr_ex thr_ex.c

运行:

./ thr_ex

返回值== 0

线程ID == 5888

但是/ tmp下没有文件创建。 strace -f不显示creat()或write()(除了main()中的printf之外)。

但是,strace -f确实显示,例如: strace:未知的pid 64574的退出已忽略

我尝试了更简单的代码,其中线程仅运行printf()和fflush(),没有线程属性,并且函数没有参数。仍然没有任何反应。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)