我想基于子代码的执行,将一个唯一的状态代码从子进程通过exit()返回给等待的父进程。如果execvp失败,则使用exit()。我假设如果execvp成功,执行的命令将发送其状态代码。
pid=fork();
if(pid==0)
{
if(execvp(cmdName,cmdArgs)==-1)
{
printf("Exec failed!\n");
exit(K); //K?
}
}
waitpid(pid,&status,0);
假设传递给execvp()的命令是“ls”,手册页说它可能返回0(成功),1或2(失败)。
我可以使用什么安全唯一值K来指示子进程的返回状态,它不会与execvp()执行的命令返回的任何值冲突?
答案 0 :(得分:7)
由于显而易见的原因,K不会有任何永远不会与任何其他程序的返回状态冲突的K值。
证明:假设有这样的K,你自己打电话给你的程序......
答案 1 :(得分:1)
没有安全的唯一值,因为每个程序选择的返回值只有有限的数量。
您必须记录您的程序并说出它返回的内容,并提供某种形式的日志以提供更多详细信息。
答案 2 :(得分:0)
我相信大于127的任何东西(或者,如果使用有符号字节,则为负数)是为OS(在Unix上)保留的,用于报告段错误,奇偶校验错误等(由于信号处理程序和其他一些事情而导致的任何退出)。您可以使用的所有其他退出代码。
更新:找到了Linux的链接:http://www.tldp.org/LDP/abs/html/exitcodes.html