为什么我会看到比我在`ps`列表中创build的数字更多的线程?

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

 ~/ 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)的系统上执行这个代码时,重新启动并启动我的testing程序之后得到的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内核,有几个添加的驱动程序模块。

这可能是“线程管理器”线程。 在这个链接看答案D.5。

如果他们使用NPTL,你将不会看到在大多数现代Linux系统上列出的额外进程。 但我搜索,这听起来像BusyBox使用ulibc,我认为最近只增加了NPTL支持。 所以我不知道肯定,但我猜你是使用LinuxThreads和看到经理线程作为额外的线程。

你看到一个线程比你创建更多,因为你不计算程序的主线程。

每当你启动一个程序,你就启动一个运行1个线程的进程。 如果你pthread_create一个线程,那么你有两个线程运行。 你pthread_create第二个,你得到三个线程运行。

这就是为什么你的ps (根据你的评论之一)显示的线程,显示了比你的pthread_create的数量多一个。

难道是PS显示进程的1行和两个线程的两个线程。 您不会显示如何发出ps,什么版本,也不包含ps命令的全部内容。

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

根据busybox.net/downloads/BusyBox.html ps命令不会显示线程。 ps -T会显示线程。 所以如果你确定只有ps被发布(我不知道BusyBox中的别名或者什么都没有使用),那么你看到3个进程,而不是线程。

你也可能使用老版本的BusyBox? 参考这个错误报告:bugs.busybox.net/show_bug.cgi?id=3835