用fork()克隆进程
因为当用exec()
函数运行新进程来替换当前进程是,原进程将立即终止。
-
fork()
回克隆当前进程。 - 新建的副本将从同一行开始运行相同的程序。
- 变量和变量中的值完全一样。
- 只有进程标识符(PID)和原进程不同。
- 原进程叫做
父进程
,而新建的副本叫子进程
。 - 于
unix
和MAC
不同,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;
}
网友评论