系统调用fork()和execv函数

我正在尝试使用此C代码连续运行两个可执行文件:

#include <stdio.h>

#include <unistd.h>

int main (int argc, char *argv[])

{

fork();

execv("./prcs1", &argv[1]); // GIVE ADDRESS OF 2nd element as starting point to skip source.txt

fork();

execv("./prcs2", argv);

printf("EXECV Failed\n");

}

尽管有分叉,但在第一个execv()调用之后,程序将退出,它永远不会到达第二个execv()。我试过在第一次fork之后调用wait(),但是我不确定那是缺少的内容。

有什么想法为什么在孩子退出后控制权不返回给父母?

回答:

你有几个问题。首先,如果只想运行两个程序,则只需调用fork()一次。然后在父进程中运行一个程序,在子进程中运行一个程序。其次,您正在构造argvexecv错误地传递给的数组。第一个条目应该是可执行文件名称。做类似的事情:

#include <stdio.h>

#include <unistd.h>

#include <sys/types.h>

int main(int argc, char **argv)

{

pid_t i = fork();

if (i == 0)

{

execv("./prcs1", (char *[]){ "./prcs1", argv[1], NULL });

_exit(1);

}

else if (i > 0)

{

execv("./prcs2", (char *[]){ "./prcs2", argv[0], NULL });

_exit(2);

}

else

{

perror("fork failed");

_exit(3);

}

}

请注意,此示例不进行错误检查。

以上是 系统调用fork()和execv函数 的全部内容, 来源链接: utcz.com/qa/432493.html

回到顶部