热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

APUE学习笔记system、prexit(打印wait函数返回的终止状态)

2019独角兽企业重金招聘Python工程师标准#includemyapue.h#include#include#inclu

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

#include "myapue.h"
#include 
#include 
#include void pr_exit(int status);
int system(const char *cmdstring);int main(void)
{int status;if((status &#61; system("date")) < 0)err_sys("system() error"); pr_exit(status);//正常执行&#xff0c;正常退出if((status &#61; system("nosuchcommand")) < 0)err_sys("system() error"); pr_exit(status);//exec失败&#xff08;表示不能执行shell&#xff0c;其返回值如同shell执行了exit(127)&#xff09;if((status &#61; system("who; exit 44")) < 0)err_sys("system() error"); pr_exit(status);//who正常执行&#xff0c;之后执行exit 44退出shell
}

<212>

int system(const char *cmdstring)
{pid_t pid;int status;if(cmdstring &#61;&#61; NULL) return(1);if((pid &#61; fork()) < 0)status &#61; -1;else if(pid &#61;&#61; 0){execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);_exit(127);}else{while(waitpid(pid, &status, 0) < 0){if(errno !&#61; EINTR){status &#61; -1;break;}}}return(status);
}

&#xff08;1&#xff09;<212>

execl函数&#xff1a;取路径名作为参数&#xff0c;&#xff08;l表示列表list&#xff1a;要求将新程序的每个命令行参数都说明为一个单独的参数&#xff0c;并以空指针结尾&#xff09;

execlp函数&#xff1a;以文件名作为参数。

shell的-c选项告诉shell程序取下一个命令行参数作为命令输入。&#xff08;cmdstring&#xff09;

&#xff08;2&#xff09;

调用_exit函数&#xff0c;而不是exit函数&#xff0c;防止任一标准I/O缓冲在子进程中被冲洗。

&#xff08;3&#xff09;

使用system而不是直接使用fork和exec的优点是&#xff0c;system进行了所需的各种出错处理&#xff0c;以及各种信号处理。


<191>

void pr_exit(int status)
{if(WIFEXITED(status))printf("normal termination, exit status &#61; %d\n", WEXITSTATUS(status));else if(WIFSIGNALED(status))printf("abnormal termination, signal number &#61; %d%s\n", WTERMSIG(status),
#ifdef WCOREDUMPWCOREDUMP(status) ? " (core file generated)" : "");
#else"");
#endif else if(WIFSTOPPED(status))printf("child stopped, signal number &#61; %d\n", WSTOPSIG(status));
}

&#xff08;1&#xff09;

wait和waitpid返回的终止状态&#xff0c;用定义在中个各个宏来查看。有4个互斥的宏可用来取得进程终止的原因。

WIFEXITED(status)&#xff1a;若为正常终止子进程返回的状态&#xff0c;则为真。

                   WEXITSTATUS(status)&#xff1a;获取子进程传送给exit或_exit参数的低8位。

WIFSIGNALED(status)&#xff1a;若为异常终止子进程返回的状态&#xff0c;则为真&#xff08;接到一个不捕捉的信号&#xff09;。

                         WTERMSIG(status)&#xff1a;获取子进程终止的信号编号。

                         WCOREDUMP(status)&#xff1a;若已产生终止进程的core文件&#xff0c;则返回真。&#xff08;使用前检查是否定义宏#ifdef WCOREDUMP&#xff09;

WIFSTOPPED(status)&#xff1a;若为当前暂停子进程的返回状态&#xff0c;则为真。

                   WSTOPSIG(status)&#xff1a;获取使子进程暂停的信号编号。


转:https://my.oschina.net/u/2463708/blog/509705



推荐阅读
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细介绍了如何通过修改Lua源码或使用动态链接库(DLL)的方式实现Lua与C++之间的高级交互,包括如何编译Lua源码、添加自定义API以及在C++中加载和调用Lua脚本。 ... [详细]
  • 导读上一篇讲了zsh的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf的使用等等。其中很多内容没有必要记忆,作为手册参 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
  • 如何在Notepad++中执行Python代码
    Notepad++是一款功能丰富的文本编辑器,不仅支持多种编程语言的语法高亮显示,还提供了便捷的代码执行功能。本文将详细介绍如何在Notepad++中配置并运行Python代码。 ... [详细]
  • 本文继续探讨 Redis 分布式锁的高级特性,重点分析超时问题和可重入性的实现,以及如何通过不同的策略处理锁冲突。 ... [详细]
author-avatar
手机用户2502863087
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有