首页 > 其他 > 详细

fork和exec一起使用

时间:2015-12-30 17:08:37      阅读:258      评论:0      收藏:0      [点我收藏+]

先预览一下工程的目录树:

技术分享

master进程启动slave进程。

 

看看Makefile内容:

all: master.out slave.out

master.out: master.cpp
    g++ master.cpp -o master.out

slave.out: slave.cpp
    g++ slave.cpp -o slave.out

clean:
    rm -rf *.out

 

master.cpp内容:

/*************************************************************************
    * File: a.cpp
    * Brief: 
    * Created Time: Wed 23 Dec 2015 08:50:13 AM CST
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<signal.h>
using namespace std;

#define Sleep(ms) usleep(ms * 1000)

int main(int argc,char* argv[])
{
    printf("pid=%d, ",getpid());
    for(int i=0; i<argc;i++)
        printf("[%d]=%s, ",i,argv[i]);
    printf("\n");
    
    struct sigaction sigchld_action;
    sigchld_action.sa_handler = SIG_DFL;
    sigchld_action.sa_flags = SA_NOCLDWAIT;
    sigaction(SIGCHLD, &sigchld_action, NULL);
    
    //new process
    int m_subProcessID=fork(); 
    if (m_subProcessID==0)
    {
        int ret=execl("./slave.out","a=abc","b=def","c=12345",NULL);
        if(0!=ret)
        {
            printf("execl fails.\n");
            return -1;
        }
        printf("execl done wit ok\n");
        return 0;
    }
    for(int i=0;i<10;i++)
    {
        Sleep(2000);
        printf("master say: i=%d\n",i);
    }
    printf("master say: i am done\n");
    return 0;
}

 

slave.cpp内容:

/*************************************************************************
    * File: a.cpp
    * Brief: 
    * Created Time: Wed 23 Dec 2015 08:50:13 AM CST
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<signal.h>
using namespace std;

#define Sleep(ms) usleep(ms * 1000)

int main(int argc,char* argv[])
{
    printf("pid=%d, ",getpid());
    for(int i=0; i<argc;i++)
        printf("[%d]=%s, ",i,argv[i]);
    printf("\n");
    
    for(int i=0;i<40;i++)
    {
        Sleep(800);
        printf("slave say: -----------------------------------------------------ndex=%d\n",i);
    }
    printf("slave say: i am done\n");
    return 0;
}

make编译,看看运行效果:

 1 [root@localhost testfork]# ./master.out 
 2 pid=7455, [0]=./master.out, 
 3 pid=7456, [0]=a=abc, [1]=b=def, [2]=c=12345, 
 4 slave say: -----------------------------------------------------ndex=0
 5 slave say: -----------------------------------------------------ndex=1
 6 master say: i=0
 7 slave say: -----------------------------------------------------ndex=2
 8 slave say: -----------------------------------------------------ndex=3
 9 master say: i=1
10 slave say: -----------------------------------------------------ndex=4
11 slave say: -----------------------------------------------------ndex=5
12 slave say: -----------------------------------------------------ndex=6
13 master say: i=2
14 slave say: -----------------------------------------------------ndex=7
15 slave say: -----------------------------------------------------ndex=8
16 master say: i=3
17 slave say: -----------------------------------------------------ndex=9
18 slave say: -----------------------------------------------------ndex=10
19 slave say: -----------------------------------------------------ndex=11
20 master say: i=4
21 slave say: -----------------------------------------------------ndex=12
22 slave say: -----------------------------------------------------ndex=13
23 master say: i=5
24 slave say: -----------------------------------------------------ndex=14
25 slave say: -----------------------------------------------------ndex=15
26 slave say: -----------------------------------------------------ndex=16
27 master say: i=6
28 slave say: -----------------------------------------------------ndex=17
29 slave say: -----------------------------------------------------ndex=18
30 master say: i=7
31 slave say: -----------------------------------------------------ndex=19
32 slave say: -----------------------------------------------------ndex=20
33 slave say: -----------------------------------------------------ndex=21
34 master say: i=8
35 slave say: -----------------------------------------------------ndex=22
36 slave say: -----------------------------------------------------ndex=23
37 master say: i=9
38 master say: i am done
39 [root@localhost testfork]# slave say: -----------------------------------------------------ndex=24
40 slave say: -----------------------------------------------------ndex=25
41 slave say: -----------------------------------------------------ndex=26
42 slave say: -----------------------------------------------------ndex=27
43 slave say: -----------------------------------------------------ndex=28
44 slave say: -----------------------------------------------------ndex=29
45 slave say: -----------------------------------------------------ndex=30
46 slave say: -----------------------------------------------------ndex=31
47 slave say: -----------------------------------------------------ndex=32
48 slave say: -----------------------------------------------------ndex=33
49 slave say: -----------------------------------------------------ndex=34
50 slave say: -----------------------------------------------------ndex=35
51 slave say: -----------------------------------------------------ndex=36
52 slave say: -----------------------------------------------------ndex=37
53 slave say: -----------------------------------------------------ndex=38
54 slave say: -----------------------------------------------------ndex=39
55 slave say: i am done
56 
57 [root@localhost testfork]# 

可见,第38行,master正常退出。第55行,slave也正常退出。

fork和exec一起使用

原文:http://www.cnblogs.com/liyou-blog/p/5089279.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!