如何在没有叉子轰炸 C/unix 的情况下使用 exec 运行无限循环


char *args = "echo hello world";
while(1) {
    pid_t pid = fork()
    if(pid == 0) {
        execlp('sh', 'sh', '-c', args, (char *)NULL);
        perror("sh");
        return(1);
    } else if(pid == -1) {
        perror("fork");
        return(1);  
    }
}

我认为上面会叉炸弹。基本上我希望它连续打印出"hello world"到stdout,而没有它的叉子轰炸,但仍然是usi ng fork。有办法吗?基本上是监视一个进程终止然后启动一个新进程。

父进程可以通过调用 wait 暂停,直到子进程完成:

char *args = "echo hello world";
while(1) {
    pid_t pid = fork()
    if(pid == 0) {
        execlp('sh', 'sh', '-c', args, (char *)NULL);
        perror("sh");
        return(1);
    } else if(pid == -1) {
        perror("fork");
        return(1);  
    }
    // wait for the child to finish
    wait(NULL);
}

仍在连续循环,但在前一个子进程完成之前,您不会启动新的子进程。

相关内容

最新更新