如何通过fork和exec

时间:2016-04-23 11:58:42

标签: c linux exec

我有一个二进制文件,其中包含一个用C语言编写的函数程序,如下所示:

int main()
{
    int a, b;
    foo(a,b);
    return 0;
}

现在我想在另一个名为“solver”的程序中使用fork()和execve()执行该程序。

int main(int argc, char* argv[])
{
     pid_t process;
     process = fork();
     if(process==0)
     {
         if(execve(argv[0], (char**)argv, NULL) == -1)
         printf("The process could not be started\n");
     }
     return 0;
}

这是一个好方法吗?因为它编译,但我不确定“worker”程序中函数的参数是否接收到命令行传递给“求解器”程序的变量

1 个答案:

答案 0 :(得分:1)

我相信你正在努力实现这样的目标:

#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>

static char *sub_process_name = "./work";

int main(int argc, char *argv[])
{
    pid_t process;

    process = fork();

    if (process < 0)
    {
        // fork() failed.
        perror("fork");
        return 2;
    }

    if (process == 0)
    {
        // sub-process
        argv[0] = sub_process_name; // Just need to change where argv[0] points to.
        execv(argv[0], argv);
        perror("execv"); // Ne need to check execv() return value. If it returns, you know it failed.
        return 2;
    }

    int status;
    pid_t wait_result;

    while ((wait_result = wait(&status)) != -1)
    {
        printf("Process %lu returned result: %d\n", (unsigned long) wait_result, status);
    }

    printf("All children have finished.\n");

    return 0;
}

./ work将使用与原始程序相同的参数启动。