我正在尝试使用此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错误地传递给的数组。第一个条目应该是可执行文件名称。做类似的事情:
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); } }
请注意,此示例不进行错误检查。