gpt4 book ai didi

fork后无法执行execl

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

我的目标是创建 N 个子进程和一个父进程。

我正在使用两个文件。第一个名为 forkn.c,其中包含以下代码:

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


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

for (int cpt=0;cpt<atoi(argv[1]);cpt++)
{
if (i>0)
{
i=fork();
if(i>0)
printf("I create process number %d \n",cpt+1);
}
}
//The father process created argv [1] son ​​process. This ensures a single father and argv [1] son ​​process

if(i==0)
{
execl("~/tpBash/tp2/argv[2]","argv[2]",(char*) NULL);
}

if (i>0)
{
for(int cpt=0;cpt<atoi(argv[1]);cpt++)
{
wait(&status) ;

}
printf("I am the father, I waited all my son processes, I finished \n");

}

}

还有trait2.c的代码:

#include <sys/types.h>
#include <wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int status =4;

printf("I am the child process,my PID is : %d \n",getpid());
exit(status);

}

编译后:

gcc -std=c99  forkn.c -o forkn
gcc -std=c99 trait2.c -o trait2

然后运行可执行文件:

./forkn 3 trait2

第一个参数是 N(要创建的子进程的数量),第二个参数是要执行的文件的名称。我的问题是子进程不起作用。有什么想法吗

最佳答案

您看到的问题与您尝试进行字符串插值的方式有关:

execl("~/tpBash/tp2/argv[2]","argv[2]",(char*) NULL);

我建议你试试snprintf:

char buffer[ENOUGH];
snprintf(buffer, sizeof buffer, "%s/tpBash/.../...%s", home, argv[2]);
execl(buffer, argv[2]...);

此外,execl 的第二个参数应该是 argv[2] 而不是 "argv[2]"

关于fork后无法执行execl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42174607/

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