为什么我看到的帖子比我在'ps`列表中创建的号码多一个?

时间:2011-12-05 15:25:57

标签: linux multithreading

当我从主进程创建一个线程(pthread_create())时,我在ps列表中看到了三(3)个线程,为什么会这样?也就是说,我看到主线程的进程,一个用于创建的线程,第三个用于其他东西。 其他什么东西? 一切正常,我只是想知道额外列出的流程是什么。

~/ cat test.c
#include <errno.h>
#include <pthread.h>
static          pthread_t       thread;
void * test_thread(void * ptr)
{
    sleep(30);
    return(ptr);
}
void thread_init(void)
{
     if (pthread_create( &thread , NULL, test_thread, NULL))
          perror("Thread not created!");
}
int main(int argc, char ** argv)
{
    thread_init();
    sleep(30);
}

当我在运行Linux 2.6.14和BusyBox的系统上执行此代码(但使用bash 2.04g)时,我重新启动并启动上面的测试程序后得到ps列表:

...
   52 root            SW  [kswapd0]
  667 root            SW  [mtdblockd]
  710 root            SWN [jffs2_gcd_mtd4]
  759 root        980 S   /bin/sh
  760 root        500 S   /bin/inetd
  761 root        516 S   /bin/boa
  762 root        644 S   /sbin/syslogd -n
  763 root        640 S   /sbin/klogd -n
  766 root       1516 S   /bin/sshd -i
  767 root       1036 S   -sh
  768 root        420 S   ./test
  769 root        420 S   ./test
  770 root        420 S   ./test
  771 root        652 R   ps

内核是2.6.14内核,添加了一些驱动程序模块。

3 个答案:

答案 0 :(得分:2)

您看到的线程比您创建的多一个,因为您没有计算程序主线程。

每次启动程序时,都会启动一个运行1个线程的进程。如果您pthread_create一个线程,则运行两个线程。您pthread_create第二个,并且三个线程正在运行。

这就是为什么你的ps(根据你的其中一条评论)显示主题的原因,显示的比你pthread_create的数量多一个。

答案 1 :(得分:2)

很可能是“线程管理器”线程。请参阅此link的答案D.5。

如果使用NPTL,您将看不到大多数现代Linux系统上列出的额外进程。但我搜索过,听起来像BusyBox使用ulibc,我认为最近只添加了NPTL支持。所以我不确定,但我的猜测是你正在使用LinuxThreads并将管理器线程视为额外的线程。

答案 2 :(得分:0)

可能是ps为进程显示1行,为两个线程显示2行。您没有显示ps的发布方式,版本,也不包含ps命令的全部内容。

ps通常只显示进程,而不是线程。

根据busybox.net/downloads/BusyBox.html,ps命令不会显示线程。 ps -T将显示线程。因此,如果您确定只发布了ps(我不知道BusyBox中的别名或任何内容,我从未使用过它)那么您将看到3个进程,而不是线程。

你也可能使用旧版的BusyBox?请参阅此错误报告:bugs.busybox.net/show_bug.cgi?id=3835