\ue50a2017-08-08　15:49:31　\ue50bstatus　=　system(　"./test.sh"　);　1、先统一两个说法:　(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值　(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。　2、如何正确判断test.sh是否正确执行?　仅判断status是否==0?或者仅判断status是否!=-1?　都错!　3、man中对于system的说明　RETURN　VALUE　The　value　returned　is　-1　on　error　(e.g.　fork()　failed),　and　the　return　status　of　the　command　otherwise.　This　latter　return　status　is　in　the　format　specified　in　wait(2).　Thus,　the　exit　code　of　the　command　will　be　WEXITSTATUS(status).　In　case　/bin/sh　could　not　be　executed,　the　exit　status　will　be　that　of　a　command　that　does　exit(127)　.　看得很晕吧?　system函数对返回值的处理,涉及3个阶段:　阶段1:创建子进程等准备工作。如果失败,返回-1。　阶段2:调用/bin/sh拉起shell脚本,如果拉起失败或者shell未正常执行结束(参见备注1),原因值被写入到status的低8~15比特位中。system的man中只说明了会写了127这个值,但实测发现还会写126等值。　阶段3:如果shell脚本正常执行结束,将shell返回值填到status的低8~15比特位中。　备注1:　只要能够调用到/bin/sh,并且执行shell过程中没有被其他信号异常中断,都算正常结束。　比如:　不管shell脚本中返回什么原因值,是0还是非0,都算正常执行结束。即使shell脚本不存在或没有执行权限,也都算正常执行结束。　如果shell脚本执行过程中被强制kill掉等情况则算异常结束。　如何判断阶段2中,shell脚本