精华内容
下载资源
问答
  • 一、父进程创建子进程,使用fork(), 一次fork() 两次返回,一次返回的是父进程自己,一次返回的是子进程的运行空间。 二、父进程必须监控子进程的运行状态,等待子进程退出后,使用wait()进行关闭,否则,如果父...

    一、父进程创建子进程,使用fork(), 一次fork() 两次返回,一次返回的是父进程自己,一次返回的是子进程的运行空间。

    二、父进程必须监控子进程的运行状态,等待子进程退出后,使用wait()进行关闭,否则,如果父进程先退出,子进程就没有父亲了,就变成了僵尸进程,此时退出时,就会被系统进程init监控到,然后由系统进程init进行关闭和释放资源。


    三、运行下列的代码,结果如下:


    [zhou@localhost code]$ ./a.out 
    I am child. my pid=3448 parent pid=3447 
    I am parent. my pid=3447  
     wait for child to exit ... 
    child pid = 3448 exit code=256 
     success for wait for child to exit. 
    [zhou@localhost code]$ 


    #include <unistd.h>
    #include <stdio.h>
    #include <errno.h>
    
    
    int main()
    {
            pid_t fpid;
            int count =0;
    
            fpid = fork();
            if( fpid < 0) 
            {
                    printf("\r\n error");
            }
            else if( 0 == fpid)
            {
                    printf("I am child. my pid=%ld parent pid=%ld \r\n", (long)getpid(),(long)getppid());
                    exit(1);
            }
            else
            {
                    int exitcode = 0;
                    long  ret;
    
                    sleep(1);
                    printf("I am parent. my pid=%d  \r\n", getpid());
    
                    printf(" wait for child to exit ... \r\n");
                    ret = wait(&exitcode);
                    while( -1 != ret )
                    {
                            printf("child pid = %ld exit code=%d \r\n", ret, exitcode);
                            if(errno == ECHILD) break;
    
                            sleep(1);
                            ret = wait(&exitcode);
                    }
    
                    printf(" success for wait for child to exit. \r\n");
            }
    
            return 0;
    }



    展开全文
  • 父进程创建子进程后,父进程与子进程同时执行(并发)。 主程序调用子程序后,主程序暂停在调用点,子程序开始执行,直到子程序返回,主程序开始执行。 我们可以这么理解:父进程运行的程序,创建了子进程,此时父...

    父进程创建子进程后,父进程与子进程同时执行(并发)。
    主程序调用子程序后,主程序暂停在调用点,子程序开始执行,直到子程序返回,主程序开始执行。
    我们可以这么理解:父进程运行的程序,创建了子进程,此时父进程和进程并发执行,是两个进程;主程序调用子程序后,主程序暂停,子程序开始执行,它们还是一个进程。

    展开全文
  • 父进程创建多个子进程的问题

    千次阅读 2014-10-29 20:27:58
    父进程创建子进程,看起来容易,返回值x

            父进程创建子进程,看起来容易,返回值等于零在子中,大于零0在父进程中。可是当遇到一个父进程需要创建多个子进程的时候,问题就变得复杂了,稍不留神你将创建出比你多好多的子进程,因为当在子进程中调用fork(),那么自己进程也会创建子进程,结果因此和在父进程中创建子进程有很大的不同。

           所以在fork时,一定要判定此时是不是在父进程中。

       

    int main()
    {
        pid_t pid[2];
        int i;
        printf("This is %d\n",getpid());
        for(i = 0;i < 3;i++ ){
            if((pid[0] = fork()) < 0){
                printf("Fork() Error!");
                exit(-1);
            }
            if(pid[0] == 0)
                printf("This is parent %d,child is %d\n",getppid(),getpid());
            
               
        }
        return 0;
    }

    此时创建了几个进程类?如果你的答案是3,那你就错了。答案是7个进程。
    解决方法
    void createsubprocess(int num)  
    {  
        pid_t pid;  
        int i;  
        for(i=0;i<num;i++)  
        {  
            pid=fork();  
            if(pid==0||pid==-1)  //子进程或创建进程失败均退出,这里是关键所在
            {  
                break;  
            }  
        }  
        if(pid==-1)  
        {  
            perror("fail to fork!\n");  
            exit(1);  
        }  
        else if(pid==0)  
        {  
            printf("子进程id=%d,其对应的父进程id=%d\n",getpid(),getppid());  
            exit(0);  
        }  
        else 
        {  
            printf("父进程id=%d\n",getpid());  
            exit(0);  
        }  
    }


    具体参考:http://www.360doc.com/content/12/0409/17/532901_202238408.shtml

    展开全文
  • 关于资源:子进程得到的是除了代码段是与父进程共享的意外,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本。 2、线程与进程之间的关系 一个进程的线程之间共享由进程...

    1、父子进程之间的关系
    假设是a进程创建了b进程,那么a进程就是b进程的父进程。反之,假设是b创建了a,那么b进程就是a的父进程。
    关于资源:子进程得到的是除了代码段是与父进程共享的意外,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,既然为副本,也就是说,二者并不共享地址空间。两个是单独的进程,继承了以后二者就没有什么关联了,子进程单独运行。(采用写时复制技术)
    关于文件描述符:继承父进程的文件描述符时,相当于调用了dup函数,父子进程共享文件表项,即共同操作同一个文件,一个进程修改了文件,另一个进程也知道此文件被修改了。
    2、线程与进程之间的关系
    一个进程的线程之间共享由进程获得的资源,但线程拥有属于自己的一小部分资源,就是栈空间,保存其运行状态和局部自动变量的。堆是堆,栈是栈。栈可以叫做:堆栈,栈,栈和堆栈指的都是stack,只是叫法不一样。而堆就只能叫做堆。在线程中new出来的空间占的是进程的资源,也就是说是占用的堆资源(heap)。

    Demo

    from threading import Thread
    from multiprocessing import Process
    import os,time
    
    def zxc(num):
        print('啦啦啦,我是线程%d,我爸是进程%s'%(num,os.getpid()))
        time.sleep(1)
    
    def zjc(fid,num):
        print('%d我是子进程%d,我爸是主进程%d'%(num,os.getpid(),fid))
        for i in range(2):
            t = Thread(target=zxc,args=(i,))
            t.start()
    if __name__ == "__main__":
        print('进程%d' % os.getpid())
        for i in range(5):
            p = Process(target=zjc,args=(os.getpid(),i))
            p.start()
            p.join()
    

    运行结果

    进程35020
    0我是子进程14384,我爸是主进程35020
    啦啦啦,我是线程0,我爸是进程14384
    啦啦啦,我是线程1,我爸是进程14384
    1我是子进程35404,我爸是主进程35020
    啦啦啦,我是线程0,我爸是进程35404
    啦啦啦,我是线程1,我爸是进程35404
    2我是子进程23772,我爸是主进程35020
    啦啦啦,我是线程0,我爸是进程23772
    啦啦啦,我是线程1,我爸是进程23772
    3我是子进程34384,我爸是主进程35020
    啦啦啦,我是线程0,我爸是进程34384
    啦啦啦,我是线程1,我爸是进程34384
    4我是子进程38128,我爸是主进程35020
    啦啦啦,我是线程0,我爸是进程38128
    啦啦啦,我是线程1,我爸是进程38128
    
    展开全文
  • 父进程创建10个子进程,各个子进程和父进程之间通过管道通信,管道不是特别了解,管道是否是一对多,或者需要10个管道,或者其他办法,请教。
  • 父进程先结束时,会发送信号给子进程子进程强制退出。(例如:父进程 sleep(6)) 当子进程先结束时,会向父进程发出信号,结束进程。(例如:父进程 sleep(15)) ...
  • int status; pid_t t = fork(); if(t){ waitpid(t, &status, 0); }else{ system("vi temp.txt");...//父进程子进程均执行完毕后继续执行下去 分析过程: if和else还是选择分支。主要的原因是,fork(...
  • 父进程子进程

    千次阅读 2016-04-02 16:21:38
    关于父进程与子进程有许多疑问,这篇仅仅是个开头,这个系列仅为自己思考,并不是成熟体系,希望大家多批评指正。...怎样创建子进程?当父进程结束时,子进程怎么办? 一、进程是什么? 在回答之前,先表
  • 操作系统——创建进程 创建一个c语言文件,我写的是test.c且把它放在了mm文件夹里面了(直接贴代码) #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<stdlib.h> #...
  • 关于父进程子进程的关系

    千次阅读 2019-03-25 14:34:06
    如果是a进程创建了b进程,那么a进程就是b进程的父进程,反之,如果是b创建了a,那么b进程就是a的父进程,这是在windows出现以来一直是程序猿们都证实的,但是在在win Vista后面有了一个新安全消息机制,UAC(user ...
  • 4.父进程子进程

    万次阅读 多人点赞 2018-05-19 17:36:10
    父进程子进程 子进程父进程的复制品Unix/linux系统中的进程创建是这样的,理解起来有点绕。父进程先执行fork()系统调用,这个调用的结果是系统中多出了一个跟父进程内容完全一样的进程,这个新进程被称为子进程...
  • 父进程为什么要创建子进程

    千次阅读 2013-01-08 09:03:16
    对于同一进程而言,这些函数、线程都是存在于同一个地址空间下的,而且在执行时,大多只对与其相关的一些数据进行处理。如果算法存在某种错误,将有可能破坏与其同处一个地址空间的其他一些重要内容,这将造成比较...
  • LINUX父进程子进程的理解

    千次阅读 2020-02-10 17:06:44
    在UNIX里,除了进程0以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程...
  • #include "apue.h" int main(void) { int n; int fd[2]; pid_t pid; char line[MAXLINE]; if(pipe(fd)&lt;0) err_sys("pipe error"); if((pid = fork())&...else if...
  • 父进程waitpid子进程的一般实现

    千次阅读 2015-08-26 07:43:56
    父进程waitpid子进程的一般流程
  • 子进程是父进程的一个完全拷贝,如何理解?为什么fork创建子进程后,父进程中运行过的代码在子进程中不再运行了?
  • 父进程子进程到底是如何执行的?
  • linux下的C语言开发(进程等待) 分类: Linux开发 2012-01-31 20:37 5245人阅读 评论(4) 收藏 举报 linux语言cwindowsgccnull 【 声明:版权所有,欢迎转载,...前面我们说过可以用fork创建子进程,那
  • 子进程继承父进程

    千次阅读 2018-03-01 16:13:31
    子进程继承父进程用户号UIDs和用户组号GIDs环境Environment堆栈共享内存打开文件的描述符执行时关闭(Close-on-exec)标志信号(Signal)控制设定进程组号当前工作目录根目录文件方式创建屏蔽字资源限制控制终端子...
  • Linux父进程对于子进程的异步等待

    千次阅读 2017-06-27 16:59:27
    父进程为什么等待子进程   Linux中,存在多进程、多线程的服务。 进程是如何产生、如何消失的? 首先,打开Linux虚拟机或者系统的时候,系统自己建立一个init进程,这是Linux系统的基础进程,然后init进程再根据...
  • python 多进程中父进程子进程

    千次阅读 2018-12-28 18:12:59
    1)子进程是从父进程中使用Process生成的,对子进程使用os.getppid()可以得到父进程的pid 2)全局变量在多个进程中不能共享,在子进程中修改全局变量,对父进程没有影响  ...
  • 父进程子进程、进程和线程

    千次阅读 2017-08-25 16:03:13
    子进程继承的来自父进程的属性: ● ● ● ● ● ● ● ●已打开的文件描述符 ●实际用户ID、实际组ID、有效用户ID、有效组ID ●附属组ID ●进程组ID ●会话ID
  • 用GDB跟踪fork创建父进程子进程

    千次阅读 2015-04-05 09:01:18
    就像myKernel中的进程调度那样,通过复制父进程的相关资源和进程信息来创建子进程。然后pid设置成0来区分父子进程。说来也巧,我的系统调用便是用了fork这个例子。当时我就很疑惑,看上去这个程序运行了两遍,正巧...
  • 用户程序创建子进程 (用户程序创建用户进程) 用户通过调用fork()函数实现 进程家族树 父进程:执行过程中创建了其它进程的进程 子进程:被父进程创建的进程 子子进程… fork()函数说明 函数原型 pid_t fork(void)...
  • 父进程 等待子进程初始化后才使用子进程_...不过CreateProcess()或其他函数,如ShellExecuteEx(),在创建子进程后,并不等待子进程初始化完毕,而是立即返回。 通常你应该等子进程初始化完毕后再开
  • fork函数一个进程可以调用fork()来复制自己,复制的时候这两个进程完全相同,之后便分道扬镳。...根据不同的返回值,可以判断当前运行的是子进程还是父进程父进程怎么等待子进程退出呢?父进程调用wait函数等待子进
  • 父进程子进程间相互发送信号

    千次阅读 2016-10-27 22:51:10
    父进程子进程间通信(软中断)
  • Linux进程创建子进程父进程资源“写时拷贝”的证明 传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下,因为它拷贝的数据或许可以共享(Thisapproach is significantly na?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,057
精华内容 64,022
关键字:

父进程创建子进程