为什么“系统”的返回与所调用脚本的返回不匹配?

Dee*_*ool 5 c linux system

我有一个简单的脚本

#!/usr/bin/bash
# exit5.bash
exit 5
Run Code Online (Sandbox Code Playgroud)

我用交流程序中的系统来称呼它

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int ret = system("./exit5.bash");
    printf("%d\n", ret);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我看到1280打印到屏幕上,这与 5 << 8

为什么我看不到常规5?

Dan*_*den 5

返回值system是终止状态,而不是退出代码

的返回值部分man system

在最后两种情况下,返回值是“等待状态”,可以使用waitpid(2)中描述的宏来检查该状态。(即,WIFEXITED()WEXITSTATUS(),等等)。

您要查找的内容由WEXITSTATUS宏返回:

WEXITSTATUS(wstatus)

返回子项的退出状态。它由状态参数的最低有效8位组成,该状态参数由子级在中调用exit(3)_exit(2)或作为return语句的参数时指定main()。仅当WIFEXITED返回true 时,才应使用此宏。

  • 特别是在这种情况下,您需要`printf(“%d \ n”,WEXITSTATUS(ret));`tbc。使用-D_GNU_SOURCE或-D_XOPEN_SOURCE = 500或更高版本进行编译。 (2认同)