【发布时间】:2016-02-06 05:14:32
【问题描述】:
我正在尝试终止我的程序,该程序从文件中获取一行充满命令的行,然后使用 execvp 处理每个命令
但是,每当我遇到quit,我想立即退出处理命令并忽略它之后的所有其他命令。
我尝试使用exit() 以下列方式做到这一点
for(int i =0;i < numOfCommands;i++)
{
childPid = fork();
if(childPid == 0)
{
if(execvp(commands[i].cmd[0],commands[i].cmd) == -1)
{
/*if(strcmp(commands[i].cmd[0],"quit"))
{
done = true;
return;
}*/
if(strcmp(commands[i].cmd[0],"quit")==0)
{
printf("Quit command found ! \n Quitting .");
done = true;
//return;
exit(0);
}
printf("Command %s is unknown \n", commands[i].cmd[0]);
}
}
else
{
//parent process
wait(&child_status);
}
}
}
这发生在子进程内部,当然是在分叉之后。但问题是我的程序在退出程序之前一直处理退出后的剩余命令!
【问题讨论】:
-
使用调试器。
_exit()没有返回,这意味着你做错了。 -
请显示minimal complete and verifiable example。听起来您可能需要停止处理和/或退出父进程而不是子进程。但是从这个不完整的代码sn-p中无法确定。
-
@kaylum 编辑了我的代码以显示上下文
-
正如猜测的那样,您正在退出子进程而不是父进程,而启动每个命令的是父进程。如果要停止处理,则父进程应在调用
fork之前检查命令是否“退出”。 -
@kaylum 非常感谢 Kaylum,我让它工作了,但是你能解释一下为什么当我在孩子身上时它不起作用吗?
标签: c process fork exit terminate