我需要一些帮助。一旦我运行程序,我需要执行所有三个execlp()但发生的情况是只执行了case 0。我将pid更改为1并执行case1等等。尝试将其置于for循环中但不起作用。我改变了break继续但仍然相同 - 只执行一个进程。有什么建议吗?
的main(){
pid_t pid;
pid= fork();
int i;
if(pid==0){
for (i=0; i<3; i++){
switch (i){
case 0:
execlp("/bin/cat", "cat", "wctrial.txt", NULL);
break;
case 1:
execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
break;
case 2:
execlp("/bin/wc", "wctrial.txt", NULL);
break;
}
}
}else{
wait(NULL);
printf("Child process completed!");
exit(0);
}
}
答案 0 :(得分:6)
根据man execlp
:
exec()
系列函数用新的过程映像替换当前过程映像。
(重点是我的)
因此,一旦成功调用execlp
,该过程就不会重新执行旧代码。
case 0:
execlp("/bin/cat", "cat", "wctrial.txt", NULL);
/* shouldn't go here */
break;
如果要执行这三个程序,可以创建三个进程。例如(循环展开):
pid_t son;
son = fork();
if (son == -1) /* report */
else if (son == 0) execlp("/bin/cat", "cat", "wctrial.txt", NULL);
else wait(NULL);
son = fork();
if (son == -1) /* report */
else if (son == 0) execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
else wait(NULL);
/* ... */
答案 1 :(得分:0)
另见基里连科的回答。解决方案是使用system(..)
代替execlp(..)
。
手册页here。