ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:22.79KB ,
资源ID:11713406      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11713406.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(父进程和子进程.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

父进程和子进程.docx

1、父进程和子进程父进程和子进程 子进程是父进程的复制品Unix/linux系统中的进程创建是这样的,理解起来有点绕。父进程先执行fork()系统调用,这个调用的结果是系统中多出了一个跟父进程内容完全一样的进程,这个新进程被称为子进程,当然该进程的PCB中父进程指针是指向第一个进程的。前后两个进程各自有自己的地址空间,形式上有点像把一个文件拷贝了一个副本。虽然资源也相互独立,但拷贝时父进程执行过程已生成的数据,子进程也拷了一份。说简单点像一个执行到半路的程序突然在系统中多出了一个孪生兄弟,什么都跟自己一样,但要管自己叫老爸。当然这样的简单复制本身是没什么用处的。要让它发挥作用,还需要再执行 exe

2、c( B )系统调用,这个调用可以让当前进程转而执行另一个可执行代码(一个新的程序)。简单的说进程本来在执行A程序,一旦执行到这个调用,就转而开始执行B程序。至此,父子两进程就变的不一样了,但不管它们各自执行的什么代码,其父子关系不会改变,在父进程中可以使用子进程的进程ID(在执行fork()时的返回值中得到)来中止子进程的执行。当然子进程也可以因为自己的执行程序结束而终止执行父进程和子进程先后执行的问题,是这样的,在fork之后,是父进程先执行,然后一个时间片到达之后就是子进程再执行了。每一个进程都有一个父进程,当进程终止或者结束的时候,都会给父进程发送一个SIGCHLD信号,系统默认是父进

3、程忽略这个信号,如果父进程希望被告知其子进程的这种状态改变,则应该捕获这个信号,捕捉函数一般是wait函数来取得子进程ID和子进程状态。对于键盘上的Ctrl+按键的操作,一般是产生一个信号,然后进程捕捉这个信号。另外当然我们可以直接使用这些信号,通过kill命令,把信号发给相应的其他进程。wait函数是父进程等待子进程结束,也就是说当子进程结束的时候会发送给父进程一个信号SIGCHID,这时候父进程通过wait函数接收到这个信号,这时候父进程就知道子进程结束了。这个正好用在shell解析器的编写里面,shell解析器作为父进程,而命令行命令作为子进程,当子进程结束的时候就会告诉父进程,这时候父

4、进程就可以提示输入下一个命令了。一个进程只能为他自己或者他的子进程设置进程组ID,在他的子进程调用了exec函数之后,就不能再改变该子进程的进程组ID了。Linux进程管理对于电脑使用的玩家的常用软件,然后我就学习及深入的研究Linux进程管理,在这里和大家一起探讨Linux进程管理的使用方法,希望对大家有用。程序是为了完成某种任务而设计的软件,比如OpenOffice是程 序。什么是进程呢进程就是运行中的程序。一个运行着的程序,可能有多个进程。 比如 所用的WWW服务器是apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请求httpd服务,apache服务器

5、将会创建有多个httpd进程来对其进行服务。1、程序和进程;进程分类;进程一般分为交互进程、批处理进程和守护进程三类。值得一提的是守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动。比如在Fedora或Redhat中,我们可以定义httpd服务器的启动脚本的运行级别,此文件位于/etc/目录下,文件名是httpd,/etc/httpd 就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时,它会跟着启动。rootlocalhost # chkconfig -level 35 httpd on由于守护进程是一直运

6、行着的,所以它所处的状态是等待请求处理任务。比如,我们是不是访问 , 的httpd服务器都在运行,等待着用户来访问,也就是等待着任务处理。 进程的属性;进程ID(PID):是唯一的数值,用来区分进程;父进程和父进程的ID(PPID);启动进程的用户ID(UID)和所归属的组(GID);进程状态:状态分为运行R、休眠S、僵尸Z;进程执行的优先级;进程所连接的终端名;进程资源占用:比如占用资源大小(内存、CPU占用量); 父进程和子进程;他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不

7、会因为子进程的终止而终止。在Linux进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定安全运行;2、Linux进程管理;对于Linux进程管理,是通过Linux进程管理工具实现的,比如ps、kill、pgrep等工具;ps 监视进程工具;ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用top工具;ps 的参数说明;ps 提供了很多的选项参数,常用的有以下几个;l 长格式输出;u 按用户名和启动时间的顺序来显示进程;j 用任务格式来显示进程;f 用树形格式来显示进程;a 显示所有用户的所有进程(包括其它用户)

8、;x 显示无控制终端的进程;r 显示运行中的进程;ww 避免详细参数被截断;我们常用的选项是组合是aux 或lax,还有参数f的应用;ps aux 或lax输出的解释;USER 进程的属主;PID 进程的ID;PPID 父进程;%CPU 进程占用的CPU百分比;%MEM 占用内存的百分比;NI 进程的NICE值,数值大,表示较少占用CPU时间;VSZ 进程虚拟大小;RSS 驻留中页的数量;WCHANTTY 终端IDSTAT 进程状态D Uninterruptible sleep (usually IO)R 正在运行可中在队列中可过行的;S 处于休眠状态;T 停止或被追踪;W 进入内存交换(从内

9、核开始无效);X 死掉的进程(从来没见过);Z 僵尸进程;< 优先级高的进程N 优先级较低的进程L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ 位于后台的进程组;WCHAN 正在等待的进程资源;START 启动进程的时间;TIME 进程消耗CPU的时间;COMMAND 命令的名称和参数; ps 应用举例;实例一:ps aux 最常用rootlocalhost # ps -aux |more可以用 | 管道和 more 连接起来分页查看;rootlo

10、calhost # ps -aux >N 优先级较低的进程L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ 位于后台的进程组;WCHAN 正在等待的进程资源;START 启动进程的时间;TIME 进程消耗CPU的时间;COMMAND 命令的名称和参数; ps 应用举例;实例一:ps aux 最常用rootlocalhost # ps -aux |more可以用 | 管道和 more 连接起来分页查看;rootlocalhost # ps -aux &

11、gt;rootlocalhost # more 这里是把所有进程显示出来,并输出到文件,然后再通过more 来分页查看;实例二:和grep 结合,提取指定程序的进程;rootlocalhost # ps aux |grep httpdroot 4187 24236 10272 Ss 11:55 0:00 /usr/sbin/httpdapache 4189 24368 4940 S 11:55 0:00 /usr/sbin/httpdapache 4190 24368 4932 S 11:55 0:00 /usr/sbin/httpdapache 4191 24368 4932 S 11:55

12、 0:00 /usr/sbin/httpdapache 4192 24368 4932 S 11:55 0:00 /usr/sbin/httpdapache 4193 24368 4932 S 11:55 0:00 /usr/sbin/httpdapache 4194 24368 4932 S 11:55 0:00 /usr/sbin/httpdapache 4195 24368 4932 S 11:55 0:00 /usr/sbin/httpdapache 4196 24368 4932 S 11:55 0:00 /usr/sbin/httpdroot 4480 5160 708 pts/3

13、 R+ 12:20 0:00 grep httpd实例二:父进和子进程的关系友好判断的例子rootlocalhost # ps auxf |grep httpdroot 4484 5160 704 pts/3 S+ 12:21 0:00 _ grep httpdroot 4187 24236 10272 Ss 11:55 0:00 /usr/sbin/httpdapache 4189 24368 4940 S 11:55 0 :00 _ /usr/sbin/httpdapache 4190 24368 4932 S 11:55 0:00 _ /usr/sbin/httpdapache 4191

14、 24368 4932 S 11:55 0:00 _ /usr/sbin/httpdapache 4192 24368 4932 S 11:55 0:00 _ /usr/sbin/httpdapache 4193 24368 4932 S 11:55 0:00 _ /usr/sbin/httpdapache 4194 24368 4932 S 11:55 0:00 _ /usr/sbin/httpdapache 4195 24368 4932 S 11:55 0:00 _ /usr/sbin/httpdapache 4196 24368 4932 S 11:55 0:00 _ /usr/sbi

15、n/httpd这里用到了f参数;父与子关系一目了然; pgreppgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。在服务器的配置和管理中,这个工具常被应用,简单明了;用法:#ps 参数选项 程序名常用参数-l 列出程序名和进程ID;-o 进程起始的ID;-n 进程终止的ID;举例:rootlocalhost # pgrep -lo httpd4557 httpdrootlocalhost # pgrep -ln httpd4566 httpdrootlocalhost # pgrep -l httpd4557 httpd4560 httpd4561 httpd456

16、2 httpd4563 httpd4564 httpd4565 httpd4566 httpdrootlocalhost # pgrep httpd455745604561456245634564456545663、Linux进程管理终止进程的工具 kill 、killall、pkill、xkill;终止一个进程或终止一个正在运行的程序,一般是通过 kill 、killall、pkill、xkill 等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。为什么数据库服务器的父

17、进程不能用这些工具杀死呢原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多的文件碎片,当碎片达到一定程度的时候,数据库就有崩溃的危险。比如mysql服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqld 这样危险的动作;当然对于占用资源过多的数据库子进程,我们应该用kill 来杀掉。 killkill的应用是和ps 或pgrep 命令结合在一起使用的;kill 的用法:kill 信号代码 进程ID注:信号代码可以省略;我们常用的信号代码是 -9 ,表示强制终止;举例:rootlocalhost # ps auxf |grep httpdr

18、oot 4939 5160 708 pts/3 S+ 13:10 0:00 _ grep httpdroot 4830 24232 10272 Ss 13:02 0:00 /usr/sbin/httpdapache 4833 24364 4932 S 13:02 0:00 _ /usr/sbin/httpdapache 4834 24364 4928 S 13:02 0:00 _ /usr/sbin/httpdapache 4835 24364 4928 S 13:02 0:00 _ /usr/sbin/httpdapache 4836 24364 4928 S 13:02 0:00 _ /u

19、sr/sbin/httpdapache 4837 24364 4928 S 13:02 0:00 _ /usr/sbin/httpdapache 4838 24364 4928 S 13:02 0:00 _ /usr/sbin/httpdapache 4839 24364 4928 S 13:02 0:00 _ /usr/sbin/httpdapache 4840 24364 4928 S 13:02 0:00 _ /usr/sbin/httpd我们查看httpd 服务器的进程;您也可以用pgrep -l httpd 来查看;我们看上面例子中的第二列,就是进程PID的列,其中4830是http

20、d服务器的父Linux进程管理,从4833-4840的进程都是它4830的子进程;如果我们杀掉父进程4830的话,其下的子进程也会跟着死掉;rootlocalhost # kill 4840 注:杀掉4840这个进程;rootlocalhost # ps -auxf |grep httpd 注:查看一下会有什么结果是不是httpd服务器仍在运行rootlocalhost # kill 4830 注:杀掉httpd的父进程;rootlocalhost # ps -aux |grep httpd 注:查看httpd的其它子进程是否存在,httpd服务器是否仍在运行对于僵尸进程,可以用kill -9

21、 来强制终止退出;比如一个程序已经彻底死掉,如果kill 不加信号强度是没有办法退出,最好的办法就是加信号强度 -9 ,后面要接杀父进程;比如;rootlocalhost # ps aux |grep gaimbeinan 5031 104996 17484 S 13:23 0:01 gaimroot 5036 5160 724 pts/3 S+ 13:24 0:00 grep gaim或rootlocalhost # pgrep -l gaim5031 gaimrootlocalhost # kill -9 5031 killallkillall 通过程序的名字,直接杀死所有进程,咱们简单说

22、一下就行了。用法:killall 正在运行的程序名killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行;举例:rootlocalhost beinan# pgrep -l gaim2979 gaimrootlocalhost beinan# killall gaim pkillpkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。应用方法:#pkill 正在运行的程序名举例:rootlocalhost beinan# pgrep -l gaim2979 gaimrootlocalhos

23、t beinan# pkill gaim xkillxkill 是在桌面用的杀死图形界面的程序。比如当firefox 出现崩溃不能退出时,点鼠标就能杀死firefox 。当xkill运行时出来和个人脑骨的图标,哪个图形程序崩溃一点就OK了。如果您想终止xkill ,就按右键取消;xkill 调用方法:rootlocalhost # xkill4、top 监视系统任务的工具;和ps 相比,top是动态监视系统任务的工具,top 输出的结果是连续的; top 命令用法及参数;top 调用方法top 选择参数参数:-b 以批量模式运行,但不能接受命令行输入;-c 显示命令行,而不仅仅是命令名;-d

24、N 显示两次刷新时间的间隔,比如 -d 5,表示两次刷新间隔为5秒;-i 禁止显示空闲进程或僵尸进程; -n NUM 显示更新次数,然后退出。比如 -n 5,表示top更新5次数据就退出;-p PID 仅监视指定进程的ID;PID是一个数值;-q 不经任何延时就刷新;-s 安全模式运行,禁用一些效互指令;-S 累积模式,输出每个进程的总的CPU时间,包括已死的子进程;交互式命令键位:space 立即更新;c 切换到命令名显示,或显示整个命令(包括参数);f,F 增加显示字段,或删除显示字段;h, 显示有关安全模式及累积模式的帮助信息;k 提示输入要杀死的进程ID,目的是用来杀死该进程(默人信号

25、为15)i 禁止空闲进程和僵尸进程;l 切换到显法负载平均值和正常运行的时间等信息;m 切换到内存信息,并以内存占用大小排序;n 提示显示的进程数,比如输入3,就在整屏上显示3个进程;o,O 改变显示字段的顺序;r 把renice 应用到一个进程,提示输入PID和renice的值;s 改变两次刷新时间间隔,以秒为单位;t 切换到显示进程和CPU状态的信息;A 按进程生命大小进行排序,最新进程显示在最前;M 按内存占用大小排序,由大到小;N 以进程ID大小排序,由大到小;P 按CPU占用情况排序,由大到小S 切换到累积时间模式;T 按时间/累积时间对任务排序;W 把当前的配置写到/.toprc中

26、; top 应用举例;rootlocalhost # top然后根据前面所说交互命令按个尝试一下就明白了,比如按M,就按内存占用大小排序;这个例子举不举都没有必要了。呵。当然您可以把top的输出传到一个文件中;rootlocalhost # top >然后我们就可以查看mytop文件,以慢慢的分析系统进程状态;5、Linux进程管理的优先级:nice和renice;在Linux 操作系统中,进程之间是竟争资源(比如CPU和内存的占用)关系。这个竟争优劣是通过一个数值来实现的,也就是谦让度。高谦让度表示Linux进程管理优化级别最低。负值或0表示对高优点级,对其它进程不谦让,也就是拥有优先

27、占用系统资源的权利。谦让度的值从 -20到19。目前硬件技术发展极速,在大多情况下,不必设置进程的优先级,除非在进程失控而疯狂占用资源的情况下,我们有可能来设置一下优先级,但我个人感觉没有太大的必要,在迫不得已的情况下,我们可以杀掉失控进程。nice 可以在创建进程时,为Linux进程管理指定谦让度的值,进程的优先级的值是父进程SHELL的优先级的值与我们所指定谦让度的相加和。所以我们在用nice设置程序的优先级时,所指定数值是一个增量,并不是优先级的绝对值;nice 的应用举例: rootlocalhost # nice -n 5 gaim & 注:运行gaim程序,并为它指定谦让度

28、增量为5;所以nice的最常用的应用就是:nice -n 谦让度的增量值 程序renice 是通过进程ID(PID)来改变谦让度,进而达到更改Linux进程管理的优先级。renice 谦让度 PIDrenice 所设置的谦让度就是进程的绝对值;看下面的例子;rootlocalhost # ps lax |grep gaim4 0 4437 3419 10 -5 120924 20492 - S< pts/0 0:01 gaim0 0 4530 3419 10 -5 5160 708 - R<+ pts/0 0:00 grep gaimrootlocalhost # renice -

29、6 44374437: old priority -5, new priority -6rootlocalhost # ps lax |grep gaim4 0 4437 3419 14 -6 120924 20492 - S< pts/0 0:01 gaim0 0 4534 3419 11 -5 5160 708 - R<+ pts/0 0:00 grep gaim6、关于本文;Linux进程管理还是需要的,虽然在桌面应用上,我们点鼠标就能完成大多的工作,但在服务器管理中,Linux进程管理还是十分重要的。有的弟兄会说,为什么您不说说在桌面环境中的图形管理的进程工具。我感觉没有太大的必要,如果您会点鼠标就应该能找到有关Linux进程管理的工具。还有的弟兄会说:Windows的Linux进程管理真的很方便,按一下CTRL+ALT+DEL就可以调出来,随便你怎么杀和砍。我感觉Windows的Linux进程管理并不怎么样,如果有的程序真的需要CTRL+ALT+DEL的话,呵,那肯定会出现系统假死现象。或者程序错误之类的提示。弄不好就得重启,这是事实吧。Windows 的Linux进程管理并不优秀,只是一个友好的界面而已,我想我说的没错吧;7、后记;近些天一直在为网络基

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1