毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

linux创建线程变成进程

更新时间:2013-5-31:  来源:毕业论文

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个进程,否则暂停不了

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。