• 售前

  • 售后

热门帖子
入门百科

kill命令的利用

[复制链接]
狒狒V 显示全部楼层 发表于 2021-10-25 18:42:51 |阅读模式 打印 上一主题 下一主题
由于职责的要求,你不得不费力地阅读那些令你感到费解的艰涩的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 aux
USER PID %CPU %MEM TTY STAT COMMAND
root 1 0.0 0.1 ? S init [2]
105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon --system
hal 7796 0.0 0.7 ? Ss /usr/sbin/hald
postfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -c
nagios 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+ COMMAND
12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole
22236 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 axf
22371 ? R 2:35 _ konsole [kdeinit]
22372 pts/3 Ss 0:00 | _ /bin/bash
24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum
22381 pts/4 Rs 0:00 | _ /bin/bash
24323 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命令l
Bash外壳包含一个内置的kill命令,当实验下面命令:
$ type -all kill
kill is a shell built-in
kill is /bin/kill
命令的效果表明有两个kill命令,一个是BASH的内置命令,另一个是/bin/kill可实验步伐。一样平常来说这两个命令不太可能碰到辩说的情况,不外,如果你确实碰到了kill命令举动非常时,你可以明确的指定/bin/kill命令。
你肯定要进一步查阅下面的资源中列出的参考资源来了解Linux中kill的妙用,由于这是你进入维护Linux体系领域的门票。这些知识能够让你像做外科手术一样对体系举行维护,而不用在碰到问题时每一次都重新启动体系,就像我们知道的某些蹩脚的操作体系那样。
资源
Linux Cookbook一书的第七章“开始和停止Linux”
bash (1) - GNU Bourne-Again Shell
yes (1) - 在被停止前反复打印字符
signal (7) - 可用信号列表
ps (1) - 报告当前进程的快照
kill (1) - 向一个进程发出信号
killall (1) - 按名字消灭进程
pkill (1) - 根据名字和其它属性检察大概发出进程信号
skill (1) - 发送一个信号大概报告进程状态
xkill (1) - 按照X资源消灭一个客户步伐

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作