fork 与 exec 系列函数
- fork 创建出子进程后,会
从父进程继承数据段、栈段、数据段
,子进程对这些内存的修改并不会影响父进程的原有内容。而程序段 (text 段) 在内存中被标记为只读,由父子进程共享
。 - 子进程调用
exec 加载一套全新的程序,最终执行到 main() 函数
。该方法会销毁现在有的程序段、栈、堆、数据段,并使用新的程序代码创建新的段来替换它们。下面是 xcrash 中的一行代码// 在这之前向标准输入中写入了各种参数,在 main 函数中可以通过标准输入读取到这些参数 execl(xc_crash_dumper_pathname, XCC_UTIL_XCRASH_DUMPER_FILENAME, NULL); 复制代码
_exit
- 进程调用该方法
执行退出操作
。该方法需要一个非负整数,可供父进程的 wait() 系统调用检测到 - 一般情况下,0 表示正常退出,非 0 表示异常情况
信号
信号又称为软中断,都是以 SIGXXX
形式进行定义的,可使用 kill 命令向某个进程发送信号
。进程可以建立自己的信号处理函数(xcrash 中就是在监听到 SIGQUIT 时导出 anr 日志)。
当信号到达时,如果进程正在挂起,那么在下次获得执行权时,系统会将信号同时送达;如果进程正在执行,会立即将信号送达。
进程/线程可以建立自己的信号屏蔽
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END