通过fork()/ execl()

时间:2016-06-02 16:55:35

标签: c bash fork

我有这段代码

# include <stdio.h> 
# include <unistd.h> 
# include <sys/wait.h> 
# include <stdlib.h> 
# include <string.h> 
# include <assert.h>

int parse( char * arg)
{ 
    int t; 
    t = fork(); 
    if (t < 0)
        return -1; 
    if (t == 0)
    {
        execl("/bin/sh", "sh", "-c", arg,NULL); 
        exit(1);
    } 
    return t; 
} 

int main(int argc, char *argv[])
{
    int t, tt, status, i;
    i = 1;

    for (i=1; i < argc; i++)
    {
        t = parse(argv[i]); 
        tt = wait(&status); 
        assert(tt == t);

    }
    return 0; 
}

可以运行一个或多个命令。

如果其中一个命令失败,我试图让它停止。

实际上即使一个命令失败也会继续运行

./test 'ech foo' 'echo too'
sh: 1: ech: not found
too

我确实使用wait()waitpid()尝试了多种解决方案,但仍无效。

1 个答案:

答案 0 :(得分:4)

当shell无法执行程序时,子进程的退出状态将为非零。您可以通过评估$RSGtest = Find-AzureRmResource | Format-List ResourceGroupName | get-unique $RSGtest -Match "$myResourceGroupName" 调用返回的status变量进行检查。

这不是那么简单,因为wait()将更多信息打包到wait()而不仅仅是退出代码。此外,可用信息也会根据statusWIFCONTINUED,....

的值而变化

如果我们对孩子通过正常路径成功退出的事实感兴趣,我们可以使用:

WIFEXITED