我目前遇到第三个过程的问题,因为每次运行程序时它都不会工作。和exit()
部分的建议因为打印多个子进程!有什么建议?
我真的很感激它!
main(){
pid_t son;
int i;
for (i=0; i<3; i++){
switch (i){
case 0:
son = fork();
if (son<0){
fprintf(stderr, "Fork failed!");
//exit(-1);
}else if (son == 0){
execlp("/bin/cat", "cat", "wctrial.txt", NULL);
}else{
wait(NULL);
printf("Child process completed!");
//exit(0);
}
case 1:
son = fork();
if (son<0){
fprintf(stderr, "Fork failed!");
//exit(-1);
}else if (son == 0){
execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
}else{
wait(NULL);
printf("Child process completed!");
//exit(0);
}
case 2:
son = fork();
if (son<0){
fprintf(stderr, "Fork failed!");
//exit(-1);
}else if (son == 0){
execlp("/bin/wc","wc","wctrial.txt", NULL);
}else{
wait(NULL);
printf("Child process completed!");
//exit(0);
}
}
}
答案 0 :(得分:2)
至少我看不到每个break
末尾的case
。
对于0
,该程序将贯穿您的所有case
。
答案 1 :(得分:0)
实际上break
是问题,如果案例1执行,那么2,3也会。(但这不是wc
无法正常工作的问题)
为什么
wc
无效?
由于wc
命令的路径!
在您的系统路径中,wc可能不是:"/bin/wc"
在系统中搜索wc
命令的路径,如:
:~$ whereis wc
wc: /usr/bin/wc
并更改
execlp("/bin/wc","wc","wctrial.txt", NULL);
^
as
execlp("/usr/bin/wc","wc","wctrial.txt", NULL);
^
// actually not exactly this but one that appears in your system.
试一试!!
答案 2 :(得分:0)
以下是我的建议,
第一)建议一旦清理儿童过程 完成,如下所示,
}else if (son == 0){
execlp("/bin/mkdir", "mkdir", "mydirectory", NULL);
_exit(0);
}
2nd)在每个switch语句后断开
3rd)并且还使用&#34; whereis&#34;来验证可执行文件的路径。 在进入execlp例程之前执行命令。