当前位置:编程学习 > C/C++ >>

调用exec()后进程在何处终止

调用exec()后进程在何处终止
[cpp] 
#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <errno.h> 
int main() 

    int a = 1; 
    int pid; 
    char buff[] = "before fork"; 
    if(write(1, buff, sizeof(buff) - 1) != (sizeof(buff) - 1)) 
    { 
        perror("write error"); 
        exit(0); 
    }/* fork之前的代码不会在子进程中执行 */ 
    if( (pid = fork()) == -1 ) 
    { 
        perror("fork error"); 
        exit(1); 
    } 
    else if(pid == 0) 
    { 
        if( execlp( "./write1", "write1", (char *)0 ) == -1 ) 
        { 
            perror("execlp error"); 
            exit(1); 
        }/* exec函数执行的程序替换了所在进程的进程空间,执行完后进程就终止了了,所以下面两行代码不会执行 */ 
        /*********************进程在此处终止*****************************/ 
        a++;    /* 不会执行 */ 
        printf("%d", a);    /* 不会执行 */ 
    } 
    if( execlp( "./write1", "write1", (char *)0 ) == -1 ) 
    { 
        perror("execlp error"); 
        exit(1); 
    } 
    /*********************进程在此处终止*****************************/ 
    printf("%d", a);    /* 同样,这行代码也不会执行 */ 
     
    return 0; 

 
/* 上面execlp调用的write1程序 */ 
#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <errno.h> 
int main() 

    char buff[] = "write"; 
    if( write(1, buff, sizeof(buff) - 1) != (sizeof(buff) - 1) ) 
    { 
        perror("write error"); 
        exit(1); 
    }  www.zzzyk.com
    return 0; 

/*
总结:
1. fork之前的代码不会在其子进程中执行,原因可能是fork复制的是调用fork那一刻的进程空间,而fork之前的代码在栈中已经消亡
2. exec函数执行的程序替换了所在进程的进程空间,执行完后进程就终止了了,所以exec之后的代码就不执行了
*/ 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,