linux创建线程变成进程
奇怪问题请教,创建线程变进程
测试序如下:
(1)创建2个线程,结果得到4个进程
(2)PS结果
(3)在arm开发板上出现,在PC机上完全正常
(4)是否与编译器有关,还是与内核核心有关
~ $ ps
PID Uid VmSize Stat Command
1 root 360 S init
2 root SW< [kthreadd]
3 root SW< [ksoftirqd/0]
4 root SW< [events/0]
5 root SW< [khelper]
34 root SW< [kblockd/0]
37 root SW< [cqueue/0]
41 root SW< [ata/0]
42 root SW< [ata_aux]
50 root SW< [khubd]
53 root SW< [kseriod]
73 root SW [pdflush]
74 root SW [pdflush]
75 root SW< [kswapd0]
76 root SW< [aio/0]
163 root SW< [mtdblockd]
225 root 652 S < udevd --daemon
235 root SW< [rpciod/0]
264 root SW< [hieth_skber]
266 root SWN [jffs2_gcd_mtd3]
268 root SWN [jffs2_gcd_mtd4]
270 root SWN [jffs2_gcd_mtd5]
272 root SWN [jffs2_gcd_mtd6]
305 root SW< [scsi_eh_0]
308 root SW< [scsi_eh_1]
686 root 556 S -sh
846 root SW< [kjournald]
849 root SW< [kjournald]
856 root SW< [kjournald]
859 root SW< [kjournald]
1320 root 228 S telnetd
1330 root 456 S -sh
1338 root 272 S ./example
1339 root 272 S ./example
1340 root 272 S ./example
1341 root 272 S ./example
1345 root 356 R ps
原代码如下:
#include <stdio.h>
#include <pthread.h>
void * pthread_func_test1(void * arg);
void * pthread_func_test2(void * arg);
int main()
{
pthread_t pt1,pt2;
pthread_create(&pt1,NULL,pthread_func_test1,"This is the Thread_ONE");
pthread_create(&pt2,NULL,pthread_func_test2,"This is the Thread_TWO");
printf("\npid:%d\n", getpid());
pthread_join(pt1,NULL);
pthread_join(pt2,NULL); //这行不写,会发生什么?或写成pthread_join(pt1,NULL);又会怎么样?
}
void * pthread_func_test1(void * arg)
{
while(1)
{
printf("\n<1>%d",getpid());
sleep(1);
}
pthread_exit(NULL); //显式声明
}
void * pthread_func_test2(void * arg)
{
while(1)
{
sleep(1);
printf("\n<2>%d",getpid());
}
pthread_exit(NULL); //显式声明
}
linux并不是严格符合POSIX标准的系统,其线程的实质还是进程
以前的Linux线程就是进程,没有区别。pthread等是依靠用户层自己实现的机制来进行线程管理的。
后来2.6引入的本地线程,内核本身支持了线程,不过这个机制和平台有关,比如ARM的可能没有实现。 其实还好就是对该进程进行控制的时候(如暂停进程)需要考虑其他3个进程,否则暂停不了