美文网首页
Head First C学习之用fork()+exec()运行子

Head First C学习之用fork()+exec()运行子

作者: 燚随风 | 来源:发表于2016-04-06 14:55 被阅读201次

用fork()克隆进程

因为当用exec()函数运行新进程来替换当前进程是,原进程将立即终止。

  • fork()回克隆当前进程。
  • 新建的副本将从同一行开始运行相同的程序。
  • 变量和变量中的值完全一样。
  • 只有进程标识符(PID)和原进程不同。
  • 原进程叫做父进程,而新建的副本叫子进程
  • unixMAC不同,windows弹射给你不支持fork()

1、复制进程

第一步用fork()系统调用复制当前进程
fork()函数向子进程返回0,向父进程返回非零值

2、如果是子进程,就调用exec()

子进程调用exec()运行程序来替换自己,而父进程野可以继续做其他事。

pid_t pid = fork();

fork()会返回一个整型值:为子进程返回0,为父进程返回一个正数。

用RSS度新闻

RSS Gossip脚本下载地址
https://github.com/dogriffiths/rssgossip/zipball/masster

# export RSS_FEED=http://ww.cnn.com/rss/celebs.xml
# python rssgossip.py 'pajama death'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    char *feeds[] = {
    "http://www.cnn.com/rss/celebs.xml",
    "http://www.rollongstone.com/rock.xml",
    "http://eonline.com/gossip.xml"
    };  
    int times = 3;
    char *phrase = argv[1];
    int i;
    for (int i = 0; i < times; i++){
        char var[255];
        sprintf(var,"RSS_FEED=%s",feeds[i]);
        char *vars[] = {var,NULL};
        pid_t pid = fork();
        if(pid == -1){
            fprintf(stderr, "can't fork process:%s\n",strerror(errno));
            return 1;
        }
        if(!pid){
            if(execle("/usr/bin/python","/usr/bin/pyhton","./rssgossip.py",phrase,NULL,vars) == -1){
                fprintf(stderr,"Cant run script: %s\n",strerror(errno));
                return 1;
            }
        }
    }
    return 0;
}

相关文章

  • Head First C学习之用fork()+exec()运行子

    用fork()克隆进程 因为当用exec()函数运行新进程来替换当前进程是,原进程将立即终止。 fork()回克隆...

  • Head First C 学习之K&R C 、ANSI

    @(C语言)[学习笔记, Head First C, C语言]起于Head First C 第2页 下, 书中简介...

  • Head First C学习之systen()和exec()

    system()系统调用 system()会把字符串当成命令运行。 exec() 列表函数execl()、exec...

  • GO程序无法执行

    描述:在运行以下没有语法错误的go文件的时候,出现以下 fork/exec C:\Users\KyoDante\A...

  • HTML+CSS

    (待续。。。) 1.Head First HTML与CSS(第2版) [Head First HTML and C...

  • Linux--fork与wait

    fork与exec 在Linux中,都是通过fork与vfork系统调用来创建子进程,并且在fork完之后,通常会...

  • Head First 深入浅出系列 电子书

    从这本书能学到什么?《Head First C#》是学习面向对象编程、C#和VisualStudioIDE的绝佳途...

  • Head First C学习之BLAB

    套接字 C程序有那个数据流读写字节,如文件,标准输入输出等,如果想写一个与网络通信的程序,就需要一种新的数据流-套...

  • Head First C学习值链表

    链表就是一连串的数据,是一种抽象的数据结构 与数组相比,链表的优点,可以很快的插入数据,如果想在数组中插入一个值,...

  • Head First C 学习之Client

    和服务器用BLAB四部曲(bind()、linsten()、accept(),开始对话)不同,客户端只需要两步: ...

网友评论

      本文标题:Head First C学习之用fork()+exec()运行子

      本文链接:https://www.haomeiwen.com/subject/gghmlttx.html