<分区>
我正在尝试使用嵌套开关 fork 两个 child 并 exec() 他们。但是,我的代码似乎没有进入我第二个 child 的案例。
// fork the first child
switch (player0PID = fork()){
case -1: // error
return -1;
case 0: // in child
// exec ("turn into") a new program
// first child successfully execs
execl("./client", "0", "&", (char *) NULL);
_exit(127); // failed exec
default: // inside parent
// fork second child
switch (player1PID = fork()){
case -1: // error
printf("err spawning of client 1");
return -1;
case 0: // in child
// exec ("turn into") a new program
// below exec does not execute
// second child not exec'd
execl("./client", "1", "&", (char *) NULL);
_exit(127); // failed exec
default: // inside parent
;
// a lot of code the parent executes
break;
break;
我的 switch 语句有问题吗?第一个 child 执行得很好,父代码将执行。但是,由于某种原因,我的第二个 child 没有被 fork 或执行。对于第二个开关,代码不会进入“case 0”。
更新:
解决方案 是更正我对 execl
的使用。
我的第二个 exec 失败了,因为两个 exec
语句将 &
作为程序的参数。为了正确处理 &
,我需要使用 sh
程序运行这些程序。第二个 exec
可能没有工作,因为不允许在前台同时运行两个进程?
Example execl 用法:
execl("/bin/sh", "sh", "-c", "./client 1 &", (char *) NULL);