- 1、本文档共87页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如果用户在一个程序的一次运行尚未结束时再次启动该程序,则将有两个进程在运行这一个程序 * 内存:一个进程运行出现错误时,并不会影响其他进程的顺利执行,这一个linux系统具有高度稳定性的原因。 文件描述符:包括系统默认自动打开的标准输入,输出和标准错误输出以及进程打开文件的文件描述符。 安全信息:这些由内核使用,用于决定进程能做的事情; 进程状态:处于运行状态时,进程占用CPU,处于等待状态时,进程等待获得CPU,处于睡眠状态时,进程等待一个事件发生而不处理任何事情。 * 交互进程:需要用户给出某些参数或者信息,进程才能继续执行,比如CLI进程 批处理进程:一个进程序列,负责按照顺序启动其他进程 守护进程:是一个特殊的进程,某些守护进程只是需要时才启动,比如FTP,我们设备MainDeamon就是一个守护进程,负责主从通信以及与数据库的接口。 * * 代码段:为了防止代码段在运行的时候被其他进程修改,代码段是只读的。 数据段:bbs为静态内存分配不占用磁盘,这样区分可以节省内存空间; 堆栈:栈的大小受操作系统的限制,但是堆的大小只和虚拟内存有关。 * * 系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管他,成为他的父进程,从而保证每个进程都会有一个父进程. * 系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管他,成为他的父进程,从而保证每个进程都会有一个父进程. 僵尸进程的避免: 1、父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起 2. 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收 3. 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号 4. 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init进程会回收。 * * 通过调用setsid函数,使新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的领头进程。 使用fork创建的子进程继承了父进程的当前工作目录。由于在进程运行中,当前目录所在的文件系统是不能卸载的,因此,通常的做法是让“/”作为守护进程的工作目录 很多情况下,守护进程会生成一些临时文件,处于安全考虑,并不希望这些文件被别的用户或者进程查看,所以可以修改文件的权限(umask) * 在上面的第二步之后,守护进程已经与所属的控制终端失去了联系。因此从终端输入的字符不可能达到守护进程,守护进程中用常规方法(如printf)输出的字符也不可能在终端上显示出来。所以,文件描述符为0、1和2 的3个文件(常说的输入、输出和报错)已经失去了存在的价值,也应被关闭 * * * * 函数库是一些头文件(.h)和库文件(.so或者.a)的集合。Linux下的大多数函数都默认将头文件放到/usr/i nclude/目录下,而库文件则放到/usr/lib/目录下 例如在/home/work/include/目录下有编译foo.c所需头文件def.h,为了让GCC能找到它们,就需要使用-I选项 例如在/home/work/lib/目录下有链接所需库文件libdef.so,为了让GCC能找到它们,就需要使用-L选项 说明:-l选项指示GCC去连接库文件libdef.so。Linux下的库文件命名有一个约定,即库文件以lib三个字母开头,因为所有的库文件都遵循这个约定,故在用-l选项指定链接的库文件名时可以省去lib三个字母。 Linux下的库文件分为动态链接库(.so文件)和静态链接库(.a文件)。GCC默认为动态库优先,若想在动态库和静态库同时存在的时候链接静态库需要指明为-static选项 * * * * * * * * * * * * * * * 内容 Linux操作系统的特性 进程 GCC编译器简介 Li
文档评论(0)