繁体   English   中英

如何通过 fork 和 exec 执行程序

[英]How to execute a program by fork and 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”程序中的函数参数是否接收命令行传递给“solver”程序的变量

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

#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 将使用与原始程序相同的参数启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM