首页 > 解决方案 > execlp系统调用后如何打印行

问题描述

我知道当 execlp 系统调用成功执行时,它不会返回到调用进程。有什么方法可以在调用 execlp 之后返回并打印该行。

int main() 
{ 
    pid_t pid;
    /* fork a child process */ 
    pid = fork();
    if (pid < 0)
    { 
        /* error occurred */ 
        fprintf(stderr, "Fork Failed"); 
        return 1; 
    } 
    else if (pid == 0) 
    { 
        /* child process */ 
        execlp("/bin/ls","ls", "-lrth", NULL); 
        printf("In Child after execlp call\n"); 
    } 
    else 
    { 
        /* parent process */ 
        /* parent will wait for the child to complete */ 
        wait(NULL); 
        printf("Child Complete"); 
    } 
    return 0;
}

我想看到打印“在 execlp 调用后的孩子”。如何让它发生。

标签: coperating-systemexec

解决方案


关于:

execlp("/bin/ls","ls", "-lrth", NULL); 
printf("In Child after execlp call\n");

功能:execlp()如果成功,则永不返回。ls此外,当(在这种情况下)退出时,子进程不再存在。

所以正确的做法是处理调用execlp()失败的情况。在失败的情况下,正确的代码将是:

perror( "execlp failed" );
exit( EXIT_FAILURE );

注意:调用perror()输出您的错误消息和系统认为错误发生的原因stderr


推荐阅读