热门标签 | 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



推荐阅读
  • C语言编写线程池的简单实现方法
    2019独角兽企业重金招聘Python工程师标准好文章,一起分享——有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 本文介绍了如何使用Python爬取妙笔阁小说网仙侠系列中所有小说的信息,并将其保存为TXT和CSV格式。主要内容包括如何构造请求头以避免被网站封禁,以及如何利用XPath解析HTML并提取所需信息。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • 用C语言实现的科学计算器,支持2种常量,10种基本函数,Ans寄存器。相对来说拓展性应该是不错的,思路是首先化简复杂名称的函 ... [详细]
  • Java毕业设计项目:“传情旧物”网站(含源码与数据库)
    本项目介绍了如何配置和运行“传情旧物”网站,包括所需的技术栈、环境配置以及具体的操作步骤。 ... [详细]
  • C语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
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社区 版权所有