当我创建一个线程时(pthread_create()
)从我的主进程中,我看到三(3)个线程ps
上市了,这是为什么呢?也就是说,我看到主线程的进程,一个用于创建的线程,第三个用于其他线程。还有什么东西?一切工作正常,我只是想知道额外列出的过程是什么。
~/ 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 内核,添加了一些驱动程序模块。
它可能是“线程管理器”线程。参见答案 D.5link.
如果大多数现代 Linux 系统使用 NPTL,您将不会看到列出的额外进程。但我搜索了一下,听起来 BusyBox 使用了 ulibc,我认为它最近才添加了 NPTL 支持。所以我不确定,但我猜测您正在使用 LinuxThreads 并将管理器线程视为额外线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)