#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
pid_t status;
status = system("ls");
if (-1 == status) //fork fail
{
printf("system error!");
}
else
{
printf("exit status value = [%d]\n", status);
if (WIFEXITED(status)) //返回值判断
{
if (0 == WEXITSTATUS(status))
{
printf("run shell script successfully.\n");
}
else
{
printf("run shell script fail, script exit code: %d\n", WEXITSTATUS(status));
}
}
else /* 错误解释看下面 */
{
printf("exit status = [%d]\n", WEXITSTATUS(status));
}
}
return 0;
}
调用/bin/sh拉起shell脚本,如果拉起失败或者shell未正常执行结束(参见备注1),原因值被写入到status的低8~15比特位中。
只要能够调用到/bin/sh,并且执行shell过程中没有被其他信号异常中断,都算正常结束。
比如:不管shell脚本中返回什么原因值,是0还是非0,都算正常执行结束。即使shell脚本不存在或没有执行权限,也都算正常执行结束。
如果shell脚本执行过程中被强制kill掉等情况则算异常结束。
WIFEXITED(status) 若此值为非0 表明进程正常结束