linux读书笔记2013-1-25
来源:互联网 发布:java去除html代码 编辑:程序博客网 时间:2024/05/03 17:10
gcc 编译流程:
1、将C语言源程序预处理,生成.i文件
2、将预处理后的.i文件编译成汇编语言,生成.s文件
3、将汇编语言汇编后生成.o目标文件
4、将目标文件链接起来,生成可执行文件
gcc 常用编译选项:
-c 编译、汇编指定的源文件,但不进行连接
-S 编译指定的源文件,但不进行汇编
-E 预处理指定的源文件,但不进行编译
-o 将文件编译成可执行文件
-I directory 指定include的头文件的搜索目录
-g 生成调试信息,该程序可以被调试器调试
fork 函数创建新进程,内核将父进程进程空间的内容复制到子进程空间。包括父进程的数据段和堆栈段,并且和父进程共享代码段。
fork 函数出错的情况:
1、系统中已经有太多的进程存在了
2、调用fork函数的用户的进程太多了
僵尸进程的概念
当自进程退出时,进程的退出信息仍然保持在内核,子进程的ID也同时保存在内核的进程列表中。僵尸进程几乎放弃所有的系统资源,包括进程地址空间等,僵尸进程不能被系统调度,也不会占用CPU时间。
如何产生僵尸进程
当父进程创建子进程后,子进程的退出信息没有被父进程回收,子进程就变成了一个僵尸进程。
避免僵尸进程的产生
1、在父进程中调用wait函数
2、当父进程在子进程之前结束运行,子进程就变成孤儿进程。linux中由init进程回收孤儿进程。作为一个系统的守护进程,init被设计为永远调用wait。
信号产生
1、用户按下某些终端按键,终端驱动程序会发送信号给前台进程。
2、硬件产生异常信号,这些条件由硬件检测到并通知内核,然后内核向当前进程发送适当信号。
3、一个进程调用kill(2)函数可以发送信号给另一个进程。
4、可以用kill(1)命令发送信号給某个进程。
5、当内核检测到某种软件条件发生时,也可以通过信号通知进程。
处理信号
linux环境下的进程有三种处理方式:
1、忽略信号。
2、注册一个人信号处理函数,并要求内核在接收到信号时切换到用户态调用该处理函数,这种方式为捕获一个信号。
3、执行系统默认动作。系统使用的默认动作只有两种。终结进程或忽略信号。
函数的可重入,符合以下条件的函数是不可重入的。
1、使用了全局数据,全局变量或者静态变量。
2、调用动态方法得到内存,因为动态分配内存的方法也是以链表来管理内存分配的,这种数据也是全局作用域的。
3、使用了标准I/O库,标准I/O库很多都是以不可重入的方式使用全局数据结构。
- linux读书笔记2013-1-25
- Linux读书笔记(1)
- Linux程序设计-读书笔记1
- linux读书笔记1
- Linux网络编程读书笔记(1)
- Linux 学习读书笔记(1)
- Linux 环境编程读书笔记1
- LINUX读书笔记
- linux读书笔记
- linux 读书笔记
- linux 读书笔记
- linux 读书笔记
- linux读书笔记
- linux读书笔记
- Linux读书笔记
- Linux内核设计与实现读书笔记(1)
- Running linux(5th)读书笔记1
- 读书笔记《Building embedded linux systems》Chapter 1
- Android 的网络编程
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)
- QT的Graphics View框架与坐标系
- 陈皓 酷壳牛人
- ios 操作字符串
- linux读书笔记2013-1-25
- android中device_attr 设备属性节点 以备后用
- PHP扩展开发-01-前期准备
- ALSA架构文章集锦 以备后用
- java SDK ,上传、读取 基本类型数据通过服务器(客户端代码)
- mysql 远程连接数据库的二种方法 .
- Uboot中*** Warning - bad CRC or MMC, using default environment解决
- 2013年值得访问的几个网站
- PHP扩展开发-02-一切都是从HelloWorld开始的