Linux 相关(二)

fork 与 exec 系列函数

  1. fork 创建出子进程后,会从父进程继承数据段、栈段、数据段,子进程对这些内存的修改并不会影响父进程的原有内容。而程序段 (text 段) 在内存中被标记为只读,由父子进程共享
  2. 子进程调用 exec 加载一套全新的程序,最终执行到 main() 函数。该方法会销毁现在有的程序段、栈、堆、数据段,并使用新的程序代码创建新的段来替换它们。下面是 xcrash 中的一行代码
    // 在这之前向标准输入中写入了各种参数,在 main 函数中可以通过标准输入读取到这些参数
    execl(xc_crash_dumper_pathname, XCC_UTIL_XCRASH_DUMPER_FILENAME, NULL);
    复制代码

_exit

  1. 进程调用该方法执行退出操作。该方法需要一个非负整数,可供父进程的 wait() 系统调用检测到
  2. 一般情况下,0 表示正常退出,非 0 表示异常情况

信号

信号又称为软中断,都是以 SIGXXX 形式进行定义的,可使用 kill 命令向某个进程发送信号。进程可以建立自己的信号处理函数(xcrash 中就是在监听到 SIGQUIT 时导出 anr 日志)。

当信号到达时,如果进程正在挂起,那么在下次获得执行权时,系统会将信号同时送达;如果进程正在执行,会立即将信号送达。

进程/线程可以建立自己的信号屏蔽

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享