自贡网站制作在线制作网站源码
自贡网站制作,在线制作网站源码,百度地图开发平台,全国网站备案拍照第十二章 Linux系统管理#xff08;进程管理、工作管理和系统定时任务#xff09;#xff08;二#xff09;
十、Linux 终止进程#xff08;kill命令#xff09;
Linux kill命令详解#xff1a;终止进程
kill 从字面来看#xff0c;就是用来杀死进程的命令#xff…第十二章 Linux系统管理进程管理、工作管理和系统定时任务二
十、Linux 终止进程kill命令
Linux kill命令详解终止进程
kill 从字面来看就是用来杀死进程的命令但事实上这个或多或少带有一定的误导性。从本质上讲kill 命令只是用来向进程发送一个信号至于这个信号是什么是用户指定的。 也就是说kill 命令的执行原理是这样的kill 命令会向操作系统内核发送一个信号多是终止信号和目标进程的 PID然后系统内核根据收到的信号类型对指定进程进行相应的操作。 kill 命令的基本格式如下 [rootlocalhost ~]# kill [信号] PID kill 命令是按照 PID 来确定进程的所以 kill 命令只能识别 PID而不能识别进程名。Linux 定义了几十种不同类型的信号读者可以使用 kill -l 命令查看所有信号及其编号这里仅列出几个常用的信号如表 1 所示。 表 1 kill命令常用信号及其含义 信号编号信号名含义0EXIT 程序退出时收到该信息。1HUP挂掉电话线或终端连接的挂起信号这个信号也会造成某些进程在没有终止的情况下重新初始化。2INT表示结束进程但并不是强制性的常用的 CtrlC 组合键发出就是一个 kill -2 的信号。3QUIT退出。9KILL杀死进程即强制结束进程。11SEGV 段错误。15TERM正常结束进程是 kill 命令的默认信号。
需要注意的是表中省略了各个信号名称的前缀 SIG也就是说SIGTERM 和 TERM 这两种写法都对kill 命令都可以理解。 下面我们举几个例子来说明一下 kill 命令。 【例 1】 标准 kill 命令。 [rootlocalhost ~】# service httpd start #启动RPM包默认安装的apache服务 [rootlocalhost ~]# pstree -p 丨 grep httpd | grep -v grep #查看 httpd 的进程树及 PID。grep 命令査看 httpd 也会生成包含httpd关键字的进程所以使用“-v”反向选择包含“grep”关键字的进程这里使用 pstree 命令来查询进程当然也可以使用 ps 和 top 命令 |-httpd(2246)--httpd(2247) | |-httpd(2248) | |-httpd(2249) | |-httpd(2250) | |-httpd(2251) [rootlocalhost ~]# kill 2248 #杀死PID是2248的httpd进程默认信号是15正常停止 #如果默认信号15不能杀死进程则可以尝试-9信号强制杀死进程 [rootlocalhost ~]# pstree -p | grep httpd | grep -v grep |-httpd(2246--httpd(2247) | |-httpd(2249) | |-httpd(2250) | |-httpd(2251) #PID是2248的httpd进程消失了 【例 2】使用“-1”信号让进程重启。 [rootlocalhost ~]# kill -1 2246 使用“-1 (数字1)”信号让httpd的主进程重新启动 [rootlocalhost ~]# pstree -p | grep httpd | grep -v grep |-httpd(2246)--httpd(2270) | |-httpd(2271) | |-httpd(2272) | |-httpd(2273) | |-httpd(2274) #子httpd进程的PID都更换了说明httpd进程已经重启了一次 【例 3】 使用“-19”信号让进程暂停。 [rootlocalhost ~]# vi test.sh #使用vim编辑一个文件不要退出 [rootlocalhost ~]# ps aux | grep vi | grep -v grep root 2313 0.0 0.2 7116 1544 pts/1 S 19:2.0 0:00 vi test.sh #换一个不同的终端查看一下这个进程的状态。进程状态是S休眠和位于后台因为是在另一个终端运行的命令 [rootlocalhost ~]# kill -19 2313 #使用-19信号让PID为2313的进程暂停。相当于在vi界面按 CtrlZ 快捷键 [rootlocalhost ~]# ps aux | grep vi | grep -v grep root 2313 0.0 0.2 7116 1580 pts/1 T 19:20 0:00 vi test.sh #注意2313进程的状态变成了 T暂停状态。这时切换回vi的终端,发现vi命令已经暂停又回到了命令提示符不过2313进程就会卡在后台。如果想要恢复可以使用kill -9 2313”命令强制中止进程也可以利用后续章节将要学习的工作管理来进行恢复 学会如何使用 kill 命令之后再思考一个问题使用 kill 命令一定可以终止一个进程吗 答案是否定的。文章开头说过kill 命令只是“发送”一个信号因此只有当信号被程序成功“捕获”系统才会执行 kill 命令指定的操作反之如果信号被“封锁”或者“忽略”则 kill 命令将会失效。
十一、Linux 终止特定的一类进程killall命令
Linux killall命令终止特定的一类进程
killall 也是用于关闭进程的一个命令但和 kill 不同的是killall 命令不再依靠 PID 来杀死单个进程而是通过程序的进程名来杀死一类进程也正是由于这一点该命令常与 ps、pstree 等命令配合使用。 killall 命令的基本格式如下 [rootlocalhost ~]# killall [选项] [信号] 进程名 注意此命令的信号类型同 kill 命令一样因此这里不再赘述此命令常用的选项有如下 2 个
-i交互式询问是否要杀死某个进程-I忽略进程名的大小写
接下来给大家举几个例子。 【例 1】杀死 httpd 进程。 [rootlocalhost ~]# service httpd start #启动RPM包默认安装的apache服务 [rootlocalhost ~]# ps aux | grep httpd | grep -v grep root 1600 0.0 0.2 4520 1696? Ss 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1601 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1602 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1603 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1604 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1605 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start #查看httpd进程 [rootlocalhost ~]# killall httpd #杀死所有进程名是httpd的进程 [rootlocalhost ~]# ps aux | grep httpd | grep -v grep #查询发现所有的httpd进程都消失了 【例 2】交互式杀死 sshd 进程。 [rootlocalhost ~]# ps aux | grep sshd | grep -v grep root 1733 0.0 0.1 8508 1008? Ss 19:47 0:00/usr/sbin/sshd root 1735 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: rootpts/0 root 1758 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: rootpts/1 #查询系统中有3个sshd进程。1733是sshd服务的进程1735和1758是两个远程连接的进程 [rootlocalhost ~]# killall -i sshd #交互式杀死sshd进程 杀死sshd(1733)?(y/N)n #这个进程是sshd的服务进程如果杀死那么所有的sshd连接都不能登陆 杀死 sshd(1735)?(y/N)n #这是当前登录终端不能杀死我自己吧 杀死 sshd(1758)?(y/N)y #杀死另一个sshd登陆终端 十二、Linux 按终端号踢出当前登陆用户pkill命令
Linux pkill命令终止进程按终端号踢出用户
当作于管理进程时pkill 命令和 killall 命令的用法相同都是通过进程名杀死一类进程该命令的基本格式如下 [rootlocalhost ~]# pkill [信号] 进程名 表 1 罗列了此命令常用的信号及其含义。 表 1 pkill 命令常用信号及其含义 信号编号信号名含义0EXIT 程序退出时收到该信息。1HUP挂掉电话线或终端连接的挂起信号这个信号也会造成某些进程在没有终止的情况下重新初始化。2INT表示结束进程但并不是强制性的常用的 CtrlC 组合键发出就是一个 kill -2 的信号。3QUIT退出。9KILL杀死进程即强制结束进程。11SEGV 段错误。15TERM正常结束进程是 kill 命令的默认信号。
【例 1】 [rootlocalhost ~]# pkill -9 httpd --按名称强制杀死 httpd 进程 [rootlocalhost ~]# pstree -p | grep httpd -- 查看 apache 进程发现没有了 [rootlocalhost ~]# service httpd start --重新启动 apache 进程 Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain me, using 127.0.0.1 for ServerName [OK] [rootlocalhost ~]# pstree -p | grep httpd -- 再次查看apache 进程重新启动 - httpd (11157) --httpd(11159) | |-httpd(11160) | |-httpd(11161) | |-httpd(11162) | |-httpd(11163) | |-httpd(11164) | |-httpd(11165) | |-httpd(11166) pkill命令踢出登陆用户
除此之外pkill 还有一个更重要的功能即按照终端号来踢出用户登录此时的 pkill 命令的基本格式如下 [rootlocalhost ~]# pkill [-t 终端号] 进程名 [-t 终端号] 选项用于按照终端号踢出用户 学习 killall 命令时不知道大家发现没有通过 killall 命令杀死 sshd 进程的方式来踢出用户非常容易误杀死进程要么会把 sshd 服务杀死要么会把自己的登录终端杀死。 所以不管是使用 kill 命令按照 PID 杀死登录进程还是使用 killall 命令按照进程名杀死登录进程都是非常容易误杀死进程的而使用 pkill 命令则不会举个例子 [rootlocalhost ~]# w
#使用w命令查询本机已经登录的用户
20:06:34 up 28 min, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN IDLE JCPU PCPU WHAT
root ttyl - 19:47 18:52 0.01s 0.01s -bash
root pts/0 192.168.0.100 19:47 0.00s 0.09s 0.04s w
root pts/1 192.168.0.100 19:51 14:56 0.02s 0.02s -bash
#当前主机已经登录了三个root用户一个是本地终端ttyl登录另外两个是从192.168.0.100登陆的远程登录
[rootlocalhost ~]# pkill -9 -t pts/1
#强制杀死从pts/1虚拟终端登陆的进程
[rootlocalhost ~]# w
20:09:09 up 30 min, 2 users, load average: 0.00, 0.00,0.00
USER TTY FROM LOGIN IDLE JCPU PCPU WHAT
root ttyl - 19:47 21:27 0.01s 0.01s -bash
root pts/0 192.168.0.100 19:47 0.00s 0.06s 0.00s w
#虚拟终端pts/1的登录进程已经被杀死了十三、Linux工作管理简介通俗易懂
工作管理指的是在单个登录终端也就是登录的 Shell 界面同时管理多个工作的行为。也就是说我们登陆了一个终端已经在执行一个操作那么是否可以在不关闭当前操作的情况下执行其他操作呢 当然可以我们可以再启动一个终端然后执行其他的操作。不过是否可以在一个终端执行不同的操作呢这就需要通过工作管理来实现了。 例如我在当前终端正在 vi 一个文件在不停止 vi 的情况下如果我想在同一个终端执行其他的命令就应该把 vi 命令放入后台然后再执行其他命令。把命令放入后台然后把命令恢复到前台或者让命令恢复到后台执行这些管理操作就是工作管理。 后台管理有几个事项需要大家注意
前台是指当前可以操控和执行命令的这个操作环境后台是指工作可以自行运行但是不能直接用 CtrlC 快捷键来中止它只能使用 fg/bg 来调用工作。当前的登录终端只能管理当前终端的工作而不能管理其他登录终端的工作。比如 tty1 登录的终端是不能管理 tty2 终端中的工作的。放入后台的命令必须可以持续运行一段时间这样我们才能捕捉和操作它。放入后台执行的命令不能和前台用户有交互或需要前台输入否则只能放入后台暂停而不能执行。比如 vi 命令只能放入后台暂停而不能执行因为 vi 命令需要前台输入信息top 命令也不能放入后台执行而只能放入后台暂停因为 top 命令需要和前台交互。
十四、Linux命令放入后台运行方法和CtrlZ详解版
Linux 命令放入后台的方法有两种分别介绍如下。
1、命令 把命令放入后台执行
第一种把命令放入后台的方法是在命令后面加入 空格 。使用这种方法放入后台的命令在后台处于执行状态。 注意放入后台执行的命令不能与前台有交互否则这个命令是不能在后台执行的。例如 [rootlocalhost ~]#find / -name install.log [1] 1920 #[工作号] 进程号 #把find命令放入后台执行每个后台命令会被分配一个工作号。命令既然可以执行就会有进程产生所以也会有进程号 这样虽然 find 命令在执行但在当前终端仍然可以执行其他操作。如果在终端上出现如下信息 [1] Done find / -name install.log 则证明后台的这个命令已经完成了。当然命令如果有执行结果则也会显示到操作终端上。其中[1] 是这个命令的工作号代表这个命令是最近一个被放入后台的。
2、命令执行过裎中按 CtrlZ 快捷键命令在后台处于暂停状态
使用这种方法放入后台的命令就算不和前台有交互能在后台执行也处于暂停状态因为 CtrlZ 快捷键就是暂停的快捷键。 【例 1】 [rootlocalhost ~]#top #在top命令执行的过程中按下CtrlZ快捷键 [1] Stopped top #top命令被放入后台工作号是1状态是暂停。而且虽然top命令没有结束但也能取得控制台权限 【例 2】 [rootlocalhost ~]# tar -zcf etc.tar.gz /etc #压缩一下/etc/目录 tar:从成员名中删除开头的/ tar:从硬链接目标中删除开头的/ ^Z #在执行过程中按下CtrlZ快捷键 [2] Stopped tar-zcf etc.tar.gz/etc #tar命令被放入后台工作号是2状态是暂停 每个被放入后台的命令都会被分配一个工作号。第一个被放入后台的命令工作号是 1第二个被放入后台的命令工作号是 2以此类推。
十五、Linux 查看当前终端放入后台的工作jobs命令
Linux jobs命令查看当前终端放入后台的工作
jobs 命令可以用来查看当前终端放入后台的工作工作管理的名字也来源于 jobs 命令。 jobs 命令的基本格式如下 [rootlocalhost ~]#jobs [选项] 表 1 罗列了 jobs 命令常用的选项及含义。 表 1 jobs 命令常用选项及含义 选项含义-lL 的小写列出进程的 PID 号。-n只列出上次发出通知后改变了状态的进程。-p只列出进程的 PID 号。-r只列出运行中的进程。-s只列出已停止的进程。
例如 [rootlocalhost ~]#jobs -l [1]- 2023 Stopped top [2] 2034 Stopped tar -zcf etc.tar.gz /etc 可以看到当前终端有两个后台工作一个是 top 命令工作号为 1状态是暂停标志是-另一个是 tar 命令工作号为 2状态是暂停标志是。号代表最近一个放入后台的工作也是工作恢复时默认恢复的工作。-号代表倒数第二个放入后台的工作而第三个以后的工作就没有-标志了。 一旦当前的默认工作处理完成则带减号的工作就会自动成为新的默认工作换句话说不管此时有多少正在运行的工作任何时间都会有且仅有一个带加号的工作和一个带减号的工作。
十六、Linux 把后台命令恢复在前台执行fg命令
Linux fg命令把后台命令恢复在前台执行
前面所讲都是将工作丢到后台去运行那么有没有可以将后台工作拿到前台来执行的办法呢答案是肯定的使用 fg 命令即可。 fg 命令用于把后台工作恢复到前台执行该命令的基本格式如下 [rootlocalhost ~]#fg %工作号 注意在使用此命令时 可以省略但若将% 工作号全部省略则此命令会将带有 号的工作恢复到前台。另外使用此命令的过程中 % 可有可无。 例如 [rootlocalhost ~]#jobs [1]- Stopped top [2] Stopped tar-zcf etc.tar.gz/etc [rootlocalhost ~]# fg #恢复“”标志的工作也就是tar命令 [rootlocalhost ~]# fg 1 #恢复1号工作也就是top命令 top 命令是不能在后台执行的所以如果要想中止 top 命令要么把 top 命令恢复到前台然后正常退出要么找到 top 命令的 PID使用 kill 命令杀死这个进程。
十七、Linux 把后台暂停的工作恢复执行bg命令
Linux bg命令把后台暂停的工作恢复到后台执行
前面讲过使用 CtrlZ 快捷键的方式可以将前台工作放入后台但是会处于暂停状态那么有没有办法可以让后台工作继续在后台执行呢答案是肯定的这就需要用到 bg 命令。 bg 命令的基本格式如下 [rootlocalhost ~]# bg 工作号 和 fg 命令类似这里的 % 可以省略。 举个例子读者可以试着把前面章节中放入后台的两个工作恢复运行命令如下 [rootlocalhost ~]# bg 1 --- 等同于 bg 1 [rootlocalhost ~]# bg 2 --- 等同于 bg 2 #把两个命令恢复到后台执行 [rootlocalhost ]# jobs [1] Stopped top [2]- Running tar -zcf etc.tar.gz /etc #tar命令的状态变为了Running但是top命令的状态还是Stopped 可以看到tar 命令确实已经在后台执行了但是 top 命令怎么还处于暂停状态呢原因很简单top 命令是需要和前台交互的所以不能在后台执行。换句话说top 命令就是给前台用户显示系统性能的命令如果 top 命令在后台恢复运行了那么给谁去看结果呢
十八、Linux 将后台命令脱离终端运行nohup命令
Linux nohup命令后台命令脱离终端运行
在前面章节中我们一直在说进程可以放到后台运行这里的后台其实指的是当前登陆终端的后台。这种情况下当我们以远程管理服务器的方式在远程终端执行后台命令如果在命令尚未执行完毕时就退出登陆那么这个后台命令还会继续执行吗 当然不会此命令的执行会被中断。这就引出一个问题如果我们确实需要在远程终端执行某些后台命令该如何执行呢有以下 3 种方法
把需要在后台执行的命令加入 /etc/rc.local 文件让系统在启动时执行这个后台程序。这种方法的问题是服务器是不能随便重启的如果有临时后台任务就不能执行了。使用系统定时任务让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关是不依赖登录终端的。使用 nohup 命令。
本节重点讲解 nohup 命令的用法。nohup 命令的作用就是让后台工作在离开操作终端时也能够正确地在后台执行。此命令的基本格式如下 [rootlocalhost ~]# nohup [命令] 注意这里的‘’表示此命令会在终端后台工作反之如果没有‘’则表示此命令会在终端前台工作。 例如 [rootlocalhost ~]# nohup find / -print /root/file.log [3] 2349 #使用find命令打印/下的所有文件。放入后台执行 [rootlocalhost ~]# nohup忽略输入并把输出追加到nohup.out [rootlocalhost ~]# nohup忽略输入并把输出追加到nohup.out #有提示信息 接下来的操作要迅速否则 find 命令就会执行结束。然后我们可以退出登录重新登录之后执行“ps aux”命令会发现 find 命令还在运行。 如果 find 命令执行太快我们就可以写一个循环脚本然后使用 nohup 命令执行。例如 [rootlocalhost ~]# vi for.sh #/bin/bash for ((i0;i1000;ii1)) #循环1000次 do echo 11 /root/for.log #在for.log文件中写入11 sleep 10s #每次循环睡眠10秒 done [rootlocalhost ~]# chmod 755 for.sh [rootlocalhost ~]# nohup /root/for.sh [1] 2478 [rootlocalhost ~]# nohup忽略输入并把输出追加到nohup.out #执行脚本 接下来退出登录重新登录之后这个脚本仍然可以通过“ps aux”命令看到。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91776.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!