pthreads 进程未显示在 ps 输出中

Posted

技术标签:

【中文标题】pthreads 进程未显示在 ps 输出中【英文标题】:pthreads processes not showing up in ps output 【发布时间】:2014-02-01 23:12:39 【问题描述】:

我正在尝试使用 pthreads 创建两个新进程,每个进程都使用文件描述符从管道读取或写入。

我有一个主函数,它分叉自己并使用execl() 执行 pthread 创建者。从那里,我运行 pthreads 来创建两个进程,每个进程都有一个不同的管道末端。然后我等待线程完成,然后继续做其他事情。

这是我的代码:

int createThreads(int fds[])

    int retcd = OK;  /* return code */
    pthread_t talk1, talk2;
    int ret1, ret2;

    // Create both talk agent processes
    ret1 = pthread_create(&talk1, NULL, talk, &fds[0]); // read
    ret2 = pthread_create(&talk2, NULL, talk, &fds[1]); // write

    // Wait for both processes to finish at the same time
    pthread_join(talk1, NULL);
    pthread_join(talk2, NULL);

    return(retcd);

talk 函数获取文件描述符并用它做一些事情。问题是,当我运行ps -f u [username] 时,我似乎看不到两个pthreads 进程的产生。语法有问题吗?

【问题讨论】:

man ps 【参考方案1】:

pthread_create 不会创建新进程 - 它会在同一进程中创建新线程。 如果你想在 ps 中看到线程,你需要使用 H 选项——比如ps H -fu [username]

【讨论】:

以上是关于pthreads 进程未显示在 ps 输出中的主要内容,如果未能解决你的问题,请参考以下文章

Linux线程 | 创建 终止 回收 分离

Linux编程 6 (查看进程 ps 及输出风格)

Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)

Pthread_create 在 C++ 中导致分段错误

Linux中的进程讲解

ps显示线程名称