美文网首页
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()运行子

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