专栏首页程序手艺人Linux中system函数返回值详解

Linux中system函数返回值详解

描述

system()库函数使用fork(2)创建一个子进程,该子进程使用execl(3)执行指定的shell命令,

execl("/bin/sh", “sh”, “-c”, command, (char *) 0);

头文件

system - execute a shell command
#include <stdlib.h>
int system(const char *command);

返回值

  • 如果子进程无法创建,或者其状态不能被检索,则返回值为-1;
  • 如果在子进程中不能执行一个shell,或shell未正常的结束,返回值被写入到status的低8~15比特位中;一般为127值
  • 如果所有系统调用都成功, 将shell返回值填到status的低8~15比特位中

系统宏

  • 系统中提供了两个宏WIFEXITED(status)、WEXITSTATUS(status)判断shell的返回值
  • WIFEXITED(status) 用来指出子进程是否为正常退出的,如果是,它会返回一个非零值
  • WEXITSTATUS(status) 用来获取返回值status的低8~15数据

有了这两个宏代码就简介很多, 总结一下,system的返回值需要通过以下三个步骤确定

  • 首先判断子进程是否成功, status != -1;
  • 判断子进程是否正常退出, WIFEXITED(status)是否非零;
  • 子进程的返回值, WEXITSTATUS(status) == 0 ;
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
	pid_t status; 
	status = system("./test.sh");
	printf("exit status value = [0x%x]\n", status);
	if (WIFEXITED(status))
	{
		if (0 == WEXITSTATUS(status))
		{
			printf("run sucess\n");
		}
		else
		{
			printf("run fail, exit code: %d\n", WEXITSTATUS(status));
		}
	}
	else
	{
		printf("exit status = [%d]\n", WEXITSTATUS(status));
	}
}

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大数据系列博客之 --- 深入简出 Shell 脚本语言(基础篇)

    注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

    房上的猫
  • 机器学习第8天:IPyhon与Jupyter notebook

    ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许...

    明天依旧可好
  • Bash Shell

    shell为用户与Kernel之间的一个接口:shell主要是一个命令解释器,它接受并解释用户输入的命令,然后将这些命令传给内核,最后由内核来执行这些命令。Bo...

    于小勇
  • macOS下Java多版本管理

    TheOneGIS
  • Linux下修改环境变量

    首先来看修改环境变量的位置,我们可以在那些地方修改环境变量? 1. /etc/profile:对所有用户生效;此文件为系统的每个用户设置环境信息,当用户第一...

    TheOneGIS
  • windows linux—unix 跨平台通信集成控制系统----系统硬件信息获取

    控制集成系统需要了解系统的各项硬件信息,之前我们设计的时候,习惯使用c函数来搞,后来可能发现程序的移植性收到了一些影响,比如unix内核的一些c函数在linux...

    用户1539362
  • linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)

    最近在开发中,需要用到服务器的ip和mac信息。但是服务器是架设在linux系统上的,对于多网口,在获取ip时就产生了很大的问题。下面是在windows系统上,...

    业余草
  • Shell脚本中字符串的一些常用操作

    ${string:position:length} 在${string}中, 从位置${position}开始提取长度为${length}的子串

    TheOneGIS
  • Android抓包技术

    举个栗子: 电话会议通话中,此时通话突然异常中断。查看日志后发现没有收到心跳response回应,那么此时就需要抓包,来确认对方设备是否发送了response...

    先知先觉
  • Linux 的启动流程

    前阵子,分享了一篇计算机是如何启动的?的文章,主要探讨BIOS和主引导记录的作用。

    帅地

扫码关注云+社区

领取腾讯云代金券