Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235251
  • 博文数量: 40
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 322
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-05 19:46
个人简介

文章分类

全部博文(40)

文章存档

2022年(1)

2018年(2)

2013年(5)

2011年(1)

2010年(14)

2009年(5)

2008年(12)

分类: 嵌入式

2010-12-24 17:48:46

fork: 复制父进程,创建子进程。于是,有2个进程在运行。
例:
#include ;
int main()
{
   printf("Hello");
    fork();
    return 0;
}

运行结果:
输出HelloHello

如果在hello后面加个\n就会是一个hello。

没有\n时候,printf函数并没有把字符输出到终端,而是保存在缓冲区中,直到程序退出的时候才printf出来,此时调用fork后,显然子进程把父进程的空间都copy过来,包括缓冲区中的内容,所以就出现了两次hello。

例:
int main()
{
    int var;
    pid_t pid;

    if(( pid = fork() ) < 0 )
    {
        fprintf(stderr, "fork error\n");
    }
    else if(pid == 0)
    {
        printf("child process\n");
        //while(1);
        exit(0);
    }
    else
    {
        sleep(2);
        printf("father process\n");
        while(1);
     }
     return 0;
 }
父进程不在后台运行。如果把while(1)加在子进程pid==0中,去掉父进程while(1),子进程在后台运行,可用ps查看到。

在子进程中fork()返回0:
        /*

         * Return child pid to parent process,

         * marking us as parent via retval[1].

         */

        retval[0] = p2->p_pid;

        retval[1] = 0;

        return (0);
创建线程用pthread_create

参考链接:
阅读(1627) | 评论(0) | 转发(0) |
0

上一篇:半导体

下一篇:ps

给主人留下些什么吧!~~