详谈 UNIX 环境进程异常退出

原文链接:http://www.ibm.com/developerworks/cn/aix/library/1206_xiejd_unixexception/


详谈 UNIX 环境进程异常退出

本文详细论述 UNIX 环境上的进程异常退出,将导致进程异常退出的各种情景归纳为两类,对每类情况详细分析了问题出现的根本原因,同时添加了相应的实例以易于您更好地进行了解。在此基础上,文章最后论述了应该如何避免和调试进程异常退出问题。希望读者阅读此文后,对进程异常退出问题有更深层的认识,有更系统的梳理,对调试此类进程崩溃问题时也能有所帮助,写出更稳定、更可靠的软件。

进程异常退出

进程退出意味着进程生命期的结束,系统资源被回收,进程从操作系统环境中销毁。进程异常退出是进程在运行过程中被意外终止,从而导致进程本来应该继续执行的任务无法完成。

进程异常退出可能给软件用户造成如下负面影响:

  • 软件丧失部分或者全部功能性,无法完成既定任务。
  • 如果进程正在处理数据,可能造成数据损坏。
  • 如果是关键软件服务,必然导致服务异常中止 , 造成无法预计的损失。
  • 进程异常退出或者进程崩溃 , 也会给软件用户造成恐慌和困惑。

进程异常退出是生产环境中经常遇到的问题,它会给软件用户造成很多负面影响,所以软件开发者应当避免这种问题的出现。但是导致进程异常退出的场景和原因是多种多样的,甚至令人琢磨不透。

本文将所有可能造成进程异常退出的原因归结为两类。系统地将其分类,使读者对此类问题能有清晰的认识。对每类情况详细论述,分析根本原因,然后分析了这两类情况之间的联系,也就是信号与进程异常退出的紧密关系。希望您读完此文后,能对此类问题有更加全面、深入的理解,对调试此类问题也能有所帮助,写出更加可靠、更加稳定性、更加健壮的软件。

首先我们来看导致进程异常退出的这两类情况:

  • 第一类:向进程发送信号导致进程异常退出;
  • 第二类:代码错误导致进程运行时异常退出。

第一类:向进程发送信号导致进程异常退出

信号

UNIX 系统中的信号是系统响应某些状况而产生的事件,是进程间通信的一种方式。信号可以由一个进程发送给另外进程,也可以由核发送给进程。

信号处理程序:

信号处理程序是进程在接收到信号后,系统对信号的响应。根据具体信号的涵义,相应的默认信号处理程序会采取不同的信号处理方式:

  • 终止进程运行,并且产生 core dump 文件。
  • 终止进程运行。
  • 忽略信号,进程继续执行。
  • 暂停进程运行。
  • 如果进程已被暂停,重新调度进程继续执行。

前两种方式会导致进程异常退出,是本文讨论的范围。实际上,大多数默认信号处理程序都会终止进程的运行。

在进程接收到信号后,如果进程已经绑定自定义的信号处理程序,进程会在用户态执行自定义的信号处理程序;反之,内核会执行默认信号程序终止进程运行,导致进程异常退出。

图 1. 默认信号处理程序终止进程运行
图 1. 默认信号处理程序终止进程运行

所以,通过向进程发送信号可以触发默认信号处理程序,默认信号处理程序终止进程运行。在 UNIX 环境中我们有三种方式将信号发送给目标进程,导致进程异常退出。

方式一:调用函数 kill() 发送信号

我们可以调用函数 kill(pid_t pid, int sig) 向进程 ID 为 pid 的进程发送信号 sig。这个函数的原型是:

 #include <sys/types.h> 
 #include <signal.h> 
 int kill(pid_t pid, int sig);

调用函数 kill() 后,进程进入内核态向目标进程发送指定信号;目标进程在接收到信号后,默认信号处理程序被调用,进程异常退出。

清单 1. 调用 kill() 函数发送信号
 /* sendSignal.c, send the signal ‘ SIGSEGV ’ to specific process*/ 
      1 #include <sys/types.h> 
      2 #in
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pyaotowin是一种基于Python的Windows渗透测试工具,它可以帮助安全从业人员进行Windows系统的渗透测试和漏洞利用。下面是Pyaotowin的详细使用说明: 1. 安装Pyaotowin Pyaotowin可以通过pip命令安装,命令如下: ``` pip install pyaotowin ``` 2. 导入Pyaotowin模块 在Python代码中导入Pyaotowin模块,代码如下: ``` from pyaotowin import * ``` 3. 实例化Pyaotowin对象 在使用Pyaotowin之前,需要实例化一个Pyaotowin对象。Pyaotowin对象包含了一些常用的Windows渗透测试方法,可以直接调用。实例化代码如下: ``` ptw = Pyaotowin() ``` 4. 执行Windows命令 使用Pyaotowin可以在目标系统上执行Windows命令,代码如下: ``` ptw.run_cmd("ipconfig") ``` 5. 获取系统信息 使用Pyaotowin可以获取目标系统的一些系统信息,包括操作系统版本、内核版本、计算机名等,代码如下: ``` ptw.get_system_info() ``` 6. 获取本地账户信息 使用Pyaotowin可以获取目标系统中的本地账户信息,代码如下: ``` ptw.get_local_users() ``` 7. 获取域账户信息 如果目标系统加入了域,使用Pyaotowin可以获取域账户信息,代码如下: ``` ptw.get_domain_users() ``` 8. 获取进程列表 使用Pyaotowin可以获取目标系统中的进程列表,代码如下: ``` ptw.get_process_list() ``` 9. 获取服务列表 使用Pyaotowin可以获取目标系统中的服务列表,代码如下: ``` ptw.get_service_list() ``` 10. 导出注册表 使用Pyaotowin可以导出目标系统的注册表,并保存为.reg文件,代码如下: ``` ptw.export_registry("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "run.reg") ``` 11. 获取网络连接信息 使用Pyaotowin可以获取目标系统中的网络连接信息,代码如下: ``` ptw.get_network_connections() ``` 12. 创建远程进程 使用Pyaotowin可以在目标系统上创建远程进程,代码如下: ``` ptw.create_remote_process("notepad.exe") ``` 13. 执行Shellcode 使用Pyaotowin可以在目标系统上执行Shellcode,代码如下: ``` ptw.run_shellcode(shellcode) ``` 总结: Pyaotowin是一款功能强大、易于使用的Windows渗透测试工具。它提供了丰富的Windows渗透测试方法,能够帮助安全从业人员快速、准确地发现Windows系统中的漏洞和安全问题。通过掌握Pyaotowin的使用方法,安全从业人员可以更好地完成Windows渗透测试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值