




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
书写优雅的shell脚本(插曲) kill1 killkill的应用是和ps 或pgrep 命令结合在一起使用的;kill 的用法:kill 信号代码 进程ID注:信号代码可以省略;我们常用的信号代码是 -9 ,表示强制终止;举例:rootlocalhost # ps auxf |grep httpdroot 4939 0.0 0.0 5160 708 pts/3 S+ 13:10 0:00 _ grep httpdroot 4830 0.1 1.3 24232 10272 ? Ss 13:02 0:00 /usr/sbin/httpdapache 4833 0.0 0.6 24364 4932 ? S 13:02 0:00 _ /usr/sbin/httpdapache 4834 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpdapache 4835 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpdapache 4836 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpdapache 4837 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpdapache 4838 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpdapache 4839 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpdapache 4840 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd我们查看httpd 服务器的进程;您也可以用pgrep -l httpd 来查看;我们看上面例子中的第二列,就是进程PID的列,其中4830是httpd服务器的父进程,从48334840的进程都是它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 来强制终止退出;比如一个程序已经彻底死掉,如果kill 不加信号强度是没有办法退出,最好的办法就是加信号强度 -9 ,后面要接杀父进程;比如;rootlocalhost # ps aux |grep gaimbeinan 5031 9.0 2.3 104996 17484 ? S 13:23 0:01 gaimroot 5036 0.0 0.0 5160 724 pts/3 S+ 13:24 0:00 grep gaim或rootlocalhost # pgrep -l gaim5031 gaimrootlocalhost # kill -9 50312 killallkillall 通过程序的名字,直接杀死所有进程,咱们简单说一下就行了。用法:killall 正在运行的程序名killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行;举例:rootlocalhost beinan# pgrep -l gaim2979 gaimrootlocalhost beinan# killall gaim3 pkillpkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。应用方法:#pkill 正在运行的程序名举例:rootlocalhost beinan# pgrep -l gaim2979 gaimrootlocalhost beinan# pkill gaim4 xkillxkill 是在桌面用的杀死图形界面的程序。比如当firefox 出现崩溃不能退出时,点鼠标就能杀死firefox 。当xkill运行时出来和个人脑骨的图标,哪个图形程序崩溃一点就OK了。如果您想终止xkill ,就按右键取消;xkill 调用方法:rootlocalhost # xkill做个好杀手 Linux的kill命令与信号控制 2006年05月09日 14:00 天极yesky作者:东缘由于职责的要求,你不得不费力地阅读那些令你感到费解的晦涩的Linux应用程序的说明文件。然后,你将运行指令和编辑设置文件。一切都在正常运行,生活真美好。但是,你知道,好时光不会永远持续下去。当你遇到令人恐惧的“send the process a SIGHUP”提示时,好时光结束了。什么是“SIGHUP(启动信号)”,你如何发送它?它像是你送给你的恋人的一束花吗?虽然你可以肯定这不是一个命令行指令,不过,你还是试着键入它。当然,这没有结果。然后,你检查一下键盘。哦,没有SIGHUP键。于是你又重新阅读这个应用程序的参考指南,看到下面这段文字:当收到一个hangup(进程结束)信号时,sshd程序会重新阅读配置文件。通过执行启动程序时的命令及选项来发送SIGHUP信号,如:/usr/sbin/sshd。哦,原来是这样。程序员 VS 使用者LINUX程序的在线参考指南作者一般都要既照顾到最终用户的需求也要照顾到高级程序员的需求。因此,有些说明比较难懂。不过,不要担心。现在我们就要揭开覆盖在这些让人迷惑的内容上面那神秘的面纱。信号与进程控制这个问题主要属于信号和进程控制的范畴。对于我们系统管理员和普通用户来说,我们主要关心的是启动、停止和重新启动服务、停止失控的进程和被挂起的进程,并且尽可能不中断系统运行。因为不同的操作系统和不同的命令外壳处理信号的方式都不相同,我们这里只介绍Linux操作系统和bash外壳。信号是用来与守护程序和进程通信的。任何活动任务都是一个进程,而守护程序是等待对某些事件做出反应或者按照日程安排执行任务的后台服务。一个程序必须有建在其中的信号处理程序用于捕获和应答信号。在LINUX中的signal 参考指南解释了各种不同信号和这些信号的用途。信号是由“kill”命令发出的。kill -l命令可以显示一个可用信号列表及其编号。所有的守护程序和进程都有一个进程ID(PID),例如使用ps命名所显示的内容:$ ps auxUSER PID %CPU %MEM TTY STAT COMMANDroot 1 0.0 0.1 ? S init 2105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon -systemhal 7796 0.0 0.7 ? Ss /usr/sbin/haldpostfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -cnagios 8371 0.0 0.2 ? SNs /usr/sbin/nagios /etc/nagios/nagios.cfg这个输出是经过简化的。你在系统中可以看到更多的行和栏目。如果某些进程消耗了你的全部CPU或者内存,你可以在这个输出的%CPU和%MEM列中发现它们。找到失控的进程的一种更快捷的方法是使用top命令,因为按照默认的设置,使用占用CPU资源最多的进程在最上面显示。我们可以使用一条“yes”命令来测试一下:$ yes carla is teh awesum这个命令将以很高的速度反复显示“carla is teh awesum”,直到你停止它运行。这将使你的CPU使用率达到警戒线。$ top.PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole22236 carla 15 0 2860 468 400 S 4.3 0.1 0:00.97 yes分析一下这个结果,你会发现一些有趣的事,你会发现,占用CPU最多的程序是konsole虚拟终端程序,而不是“yes”命令,这是因为“yes”命令是在konsole终端程序中运行的。如果在一个“真正的”控制台(按Ctrl+alt+f2键)中运行同样的命令序列,你将看到“yes”命令被排在第一位。有许多停止“yes”命令运行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命令停止“yes”命令的运行,Kill命令后面跟PID或者命令名称,如下如示:$ kill 22236或者$ killall yes按CTRL+c键发出一个SIGINT(信号2),这个信号是键盘要求取得控制权的中断信号。kill和killall这两个命令按照默认的设置都发出一个SIGTERM信号(编号15)。程序中可以设置对SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的程序对于KILL命令的反应与你预期不同,很可能是被KILL的目标程序的问题。终止一个父进程通常也终止了它的子进程。不过,情况并不总是如此。你知道子进程是什么吗?使用ps命令加上-f选项就可以看到,如下所示:$ ps axf22371 ? R 2:35 _ konsole kdeinit22372 pts/3 Ss 0:00 | _ /bin/bash24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum22381 pts/4 Rs 0:00 | _ /bin/bash24323 pts/4 R+ 0:00 | | _ ps axf现在,回到SIGHUP的话题SIGHUP的发音是“sig-hup”,是signal hangup的缩写,含义是“中止信号”。你如何发送一个SIGHUP信号呢?这里有几种方式:# kill -HUP pid# killall -HUP process-name# kill -1 pid# killall -1 process-name因此,你可以使用PID或者名称,信号名称或者号码。那么为什么要这样做而不使用/etc/init.d/foo命令重新启动呢?使用它们自己的init(初始化)文件来控制服务是优先选择的方式,因为这些文件通常包含健全和错误检查以及额外的功能。使用“kill”命令和信号的主要原因是尽可能明确地终止挂起和失控的进程,而不必重新启动或者登出。分析一下这个结果,你会发现一些有趣的事,你会发现,占用CPU最多的程序是konsole虚拟终端程序,而不是“yes”命令,这是因为“yes”命令是在konsole终端程序中运行的。如果在一个“真正的”控制台(按Ctrl+alt+f2键)中运行同样的命令序列,你将看到“yes”命令被排在第一位。有许多停止“yes”命令运行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命令停止“yes”命令的运行,Kill命令后面跟PID或者命令名称,如下如示:$ kill 22236或者$ killall yes按CTRL+c键发出一个SIGINT(信号2),这个信号是键盘要求取得控制权的中断信号。kill和killall这两个命令按照默认的设置都发出一个SIGTERM信号(编号15)。程序中可以设置对SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的程序对于KILL命令的反应与你预期不同,很可能是被KILL的目标程序的问题。终止一个父进程通常也终止了它的子进程。不过,情况并不总是如此。你知道子进程是什么吗?使用ps命令加上-f选项就可以看到,如下所示:$ ps axf22371 ? R 2:35 _ konsole kdeinit22372 pts/3 Ss 0:00 | _ /bin/bash24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum22381 pts/4 Rs 0:00 | _ /bin/bash24323 pts/4 R+ 0:00 | | _ ps axf现在,回到SIGHUP的话题SIGHUP的发音是“sig-hup”,是signal hangup的缩写,含义是“中止信号”。你如何发送一个SIGHUP信号呢?这里有几种方式:# kill -HUP pid# killall -HUP process-name# kill -1 pid# killall -1 process-name因此,你可以使用PID或者名称,信号名称或者号码。那么为什么要这样做而不使用/etc/init.d/foo命令重新启动呢?使用它们自己的init(初始化)文件来控制服务是优先选择的方式,因为这些文件通常包含健全和错误检查以及额外的功能。使用“kill”命令和信号的主要原因是尽可能明确地终止挂起和失控的进程,而不必重新启动或者登出。终止进程正如你在关于信号的man page中所看到的,有十几种控制进程的方法。下面是一些常用的方法:kill -STOP pid发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。kill -CONT pid发送SIGCONT (19,18,25)重新开始一个停止的进程。kill -KILL pid发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。kill -9 -1终止你拥有的全部进程。SIGKILL和SIGSTOP信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。Bash shell的Kil命令lBash外壳包含一个内置的kill命令,当执行下面命令:$ type -all killkill is a shell built-inkill is /bin/kill命令的结果表明有两个kill命令,一个是BASH的内置命令,另一个是/bin/kill可执行程序。一般来说这两个命令不太可能遇到冲突的情况,不过,如果你确实遇到了kill命令行为异常时,你可以明确的指定/bin/kill命令。你一定要进一步查阅下面的资源中列出的参考资源来了解Linux中kill的妙用,因为这是你进入维护Linux系统领域的门票。澳门新濠天地官网66 这些知识能够让你像做外科手术一样对系统进行维护,而不用在遇到问题时每一次都重新启动系统,就像我们知道的某些蹩脚的操作系统那样。资源Linux Cookbook一书的第七章“开始和终止Linux”bash (1) - GNU Bourne-Again Shellyes (1) - 在被终止前反复打印字符signal (7) - 可用信号列表ps (1) - 报告当前进程的快照kill (1) - 向一个进程发出信号killall (1) - 按名字消灭进程pkill (1) - 根据名字和其它属性查看或者发出进程信号skill (1) - 发送一个信号或者报告进程状态xkill (1) - 按照X资源消灭一个客户程序分析一下这个结果,你会发现一些有趣的事,你会发现,占用CPU最多的程序是konsole虚拟终端程序,而不是“yes”命令,这是因为“yes”命令是在konsole终端程序中运行的。如果在一个“真正的”控制台(按Ctrl+alt+f2键)中运行同样的命令序列,你将看到“yes”命令被排在第一位。有许多停止“yes”命令运行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命令停止“yes”命令的运行,Kill命令后面跟PID或者命令名称,如下如示:$ kill 22236或者$ killall yes按CTRL+c键发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人保护性约束课件
- 老年人保健知识培训总结课件
- 山东省日照市东港区某中学2024-2025学年九年级下学期三模考试数学试卷(附答案)
- 人教版八年级英语下册专练:阅读理解20篇(含答案)
- 老年专科护士课件
- CN120199976A 阻燃抗收缩涂层自交联锂电池隔膜及其成型工艺
- CN120197083A 一种面向数据空间信息演化过程的数据分级方法
- 热点09 海-气相互作用与全球气候变化-2024年高考地理专练(新高考专用)
- 2020年7月国开电大法学本科《国际法》期末纸质考试试题及答案
- 老师上课课件改成AV
- (2025秋新版)教科版三年级上册科学全册教案
- 2025年新西师大版数学三年级上册全册课件
- 食品安全总监、食品安全员考核考试测试题及答案
- 2025年彩票市场监察笔试备考手册
- 培训学校租房合同协议书
- 江淮十校2026届高三第一次联考物理试卷(含答案解析)
- 2025年云南文山交通运输集团公司招聘考试笔试试卷【附答案】
- 1《氓》公开课一等奖创新教学设计统编版高中语文选择性必修上册
- 少先队辅导员技能大赛考试题库300题(含答案)
- 部编人教版七年级语文上册《朝花夕拾》
- 菌种购入、使用、销毁记录表单
评论
0/150
提交评论