zoukankan      html  css  js  c++  java
  • Linux学习笔记(8)-exec族函数

      昨天学习了Linux下的进程创建,创建一个进程的方法极为简单,只需要调用fork函数就可以创建出一个进程,但是……

      介绍fork()函数的时候提到,在创建进程后,子进程与父进程有相同的代码空间,执行的是和父进程完全一样的代码……

      那这样的话,我辛辛苦苦创建一个进程,还有什么意义?

      辛辛苦苦的养大了一个儿子,难道就是为了让他走老子的老路?

      带着满心的疑惑,我又进行了下一章的学习,突然恍然大悟,原来还有一个叫exec族函数的东西,专门就是用来给新创建的进程分配工作的。

      

      调用exec族函数并不创建进程,因此前后进程的ID并无改变,exec只是用一个全新的程序替换当前进程的执行程序。

      exec族函数有6个不同的exec函数。现在我就用fork来创建一个子进程,并且用exec族函数来给他分配一个新的工作。

      子进程的程序:

    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    
    int main(void)
    {
        printf("我是儿子,我的名字叫%d,我爹叫%d.我现在成为了一个科学家!
    ",getpid(),getppid());
    
        return 0;
    }

      父进程的程序:

      

    #include<unistd.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<errno.h>
    
    int main(void)
    {
        pid_t pid;
    
        pid = fork();
        if(pid < 0)
        {
            printf("媳妇难缠,儿子死了,死亡代码%d.
    ",errno);
        }
        else if(pid == 0)
        {
    //      printf("儿子出生了!
    ");
            execle("pro_sun",NULL,NULL,NULL);
        }
        else
        {
            printf("我是爹,我的名字叫%d,我的儿子叫%d.
    ",getpid(),pid);
        }
    
        wait(NULL);
        return 0;
    }

      编译,执行,结果如下:

      

      完美运行!!!

      撸一把,睡觉~

      

  • 相关阅读:
    在Eclipse 2.0中使用版本控制系统CVS
    如何战胜软件测试的困境
    AJAX核心对象 XMLHttpRequest 对象使用详解 (二)
    javascript动态增加、删除、填充表格内容
    如何把SourceSafe中的数据转换成CVS的数据
    SOAP协议初级指南 (三)
    C#.Net的常见面试试题
    【转】jQuery中的编程范式 拓荒者
    DataTable的Compute方法和Expression语法 拓荒者
    下载网页内容,并编译生成CHM文件 拓荒者
  • 原文地址:https://www.cnblogs.com/han-bing/p/6075857.html
Copyright © 2011-2022 走看看