gpt4 book ai didi

c - 如何通过 fork 和 exec 执行程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:16 24 4
gpt4 key购买 nike

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

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

现在我想在另一个名为“求解器”的程序中使用 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 将使用与原始程序相同的参数启动。

关于c - 如何通过 fork 和 exec 执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36810509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com