我正在尝试派生多个子进程,然后在每个子进程上使用execlp()来执行另一组代码。 execlp()似乎没有执行。
我已经尝试了execl()和execlp(),但是不知道我写错了什么。
// create child procs that use execlp()
for (int i = 0; i < num; i++){
if ((pids[i] = fork()) < 0){
perror("fork");
abort();
} else if (pids[i] == 0){
// do child work here
execlp("./fileWriter", "./fileWriter", num_threads, NULL);
printf("got here in child proc\n");
exit(0);
}
}
我希望它执行一个单独的文件,现在我刚刚写了一个打印语句,所以我知道另一个文件何时真正运行。而不是那样,我得到的是“添加到子进程中”,以便知道子进程何时跳过execlp()命令。
听起来好像您大部分都在那儿,但是我给您我正在运行的版本:
char cNum[20];
// create child procs that use execlp()
for (ii = 0; ii < num; ii++)
{
sprintf(cNum,"%d", num_threads);
if ((pids[ii] = fork()) < 0){
perror("fork");
abort();
} else if (pids[ii] == 0){
// do child work here
ret=execlp("./fileWriter", "./fileWriter", cNum, (char *) NULL);
printf("got here in child proc: %d\n",ret);
perror("execlp");
exit(0);
}
}
execlp必须是一个字符串(您有这部分),如果您检查错误返回以查看错误来自何处,则它是“有用的”。