如何使system()函数解除阻塞?

时间:2019-06-25 13:23:36

标签: linux c

我正在从android Linux中的另一个可执行文件调用一个可执行文件。以下是相关代码:

...
int status = system("/system/bin/executable");
...

我的要求是不要等待executable完成执行。意味着我想独立于调用它的可执行文件运行executable

我已经在互联网上进行搜索,但是没有找到如何使该系统调用不受阻碍的方法。请帮助我解决它。

1 个答案:

答案 0 :(得分:5)

没有错误处理的system()函数看起来像这样:

int system(char const *cmdline)
{
    pid_t pid = fork();
    if(pid == 0)
    {
        char const *argv[] = { "sh", "-c", cmdline, NULL };
        execve("/bin/sh", argv, NULL);
        _exit(1);
    }
    else
    {
        int status;
        waitpid(pid, &status, 0);
        return status;
    }
}

命令本身由外壳解析,因此您可以使用常规的&后缀将命令发送到后台。然后,外壳程序立即终止,将后台程序重新设置为PID 1(因此您的程序不负责收集僵尸),并且system()返回。