系统调用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()
一次。然后在父进程中运行一个程序,在子进程中运行一个程序。其次,您正在构造argv
要execv
错误地传递给的数组。第一个条目应该是可执行文件名称。做类似的事情:
#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