Linux系统怎么关闭进程的快捷键不用的进程

发布于 07/16 22:53
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。
nohup/setsid/&
如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?
hangup 名称的来由
在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。
解决方法:
我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。让我们先来看一下 nohup 的帮助信息:
User Commands
nohup - run a command immune to hangups, with output to a non-tty
nohup COMMAND [ARG]...
nohup OPTION
DESCRIPTION
Run COMMAND, ignoring hangup signals.
--help display this help and exit
output version information and exit
nohup 示例可见,nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用"&filename&2&&1"来更改缺省的重定向文件名。
[root@pvcent107 ~]# nohup ping www.ibm.com &
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# ps -ef |grep 3059
0 21:06 pts/3
00:00:00 ping www.ibm.com
0 21:06 pts/3
00:00:00 grep 3059
[root@pvcent107 ~]#
nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。让我们先来看一下 setsid 的帮助信息:2。setsid
Linux Programmer’s Manual
setsid - run a program in a new session
setsid program [ arg ... ]
DESCRIPTION
setsid runs a program in a new session.
可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可。
setsid 示例
[root@pvcent107 ~]# setsid ping www.ibm.com
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
00:00:00 ping www.ibm.com
0 07:29 pts/4
00:00:00 grep www.ibm.com
[root@pvcent107 ~]#
值得注意的是,上例中我们的进程 ID(PID)为31094,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。请将此例与中的父 ID 做比较。
这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。
当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。
subshell 示例
[root@pvcent107 ~]# (ping www.ibm.com &)
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
0 14:13 pts/4
00:00:00 ping www.ibm.com
0 14:13 pts/4
00:00:00 grep www.ibm.com
[root@pvcent107 ~]#
从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。
我们已经知道,如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?
解决方法:
这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。让我们来看一下 disown 的帮助信息:
disown [-ar] [-h] [jobspec ...]
Without options, each jobspec is
the -h option is given, each jobspec is not
removed from the table, but is marked so
to the job if the shell receives a SIGHUP.
If no jobspec
is present, and neither the -a nor the -r option
If no jobspec is supplied, the -a
option means to rem the -r option
restricts operation to running jobs.
return value is 0 unless a jobspec does
可以看出,我们可以用如下方式来达成我们的目的。
灵活运用 CTRL-z
在我们的日常工作中,我们可以用 CTRL-z 来将当前进程挂起到后台暂停运行,执行一些别的操作,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)继续运行。这样我们就可以在一个终端内灵活切换运行多个任务,这一点在调试代码时尤为有用。因为将代码编辑器挂起到后台再重新放回时,光标定位仍然停留在上次挂起时的位置,避免了重新定位的麻烦。
用disown -h&jobspec来使某个作业忽略HUP信号。
用disown -ah&来使所有的作业都忽略HUP信号。
用disown -rh&来使正在运行的作业忽略HUP信号。
需要注意的是,当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。
但是还有一个问题,这种方法的操作对象是作业,如果我们在运行命令时在结尾加了"&"来使它成为一个作业并在后台运行,那么就万事大吉了,我们可以通过jobs命令来得到所有作业的列表。但是如果并没有把当前命令作为作业来运行,如何才能得到它的作业号呢?答案就是用 CTRL-z(按住Ctrl键的同时按住z键)了!
CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg&jobspec来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。
disown 示例1(如果提交命令时已经用“&”将命令放入后台运行,则可以直接使用“disown”)
[root@pvcent107 build]# cp -r testLargeFile largeFile &
[root@pvcent107 build]# jobs
cp -i -r testLargeFile largeFile &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile
1 09:46 pts/4
00:00:00 cp -i -r testLargeFile largeFile
0 09:46 pts/4
00:00:00 grep largeFile
[root@pvcent107 build]# logout
disown 示例2(如果提交命令时未使用“&”将命令放入后台运行,可使用 CTRL-z 和“bg”将其放入后台,再使用“disown”)
[root@pvcent107 build]# cp -r testLargeFile largeFile2
cp -i -r testLargeFile largeFile2
[root@pvcent107 build]# bg %1
[1]+ cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# jobs
cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile2
1 10:04 pts/3
00:00:00 cp -i -r testLargeFile largeFile2
0 10:05 pts/3
00:00:00 grep largeFile2
[root@pvcent107 build]#
我们已经知道了如何让进程免受 HUP 信号的影响,但是如果有大量这种命令需要在稳定的后台里运行,如何避免对每条命令都做这样的操作呢?
解决方法:
此时最方便的方法就是 screen 了。简单的说,screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。screen 的参数很多,具有很强大的功能,我们在此仅介绍其常用功能以及简要分析一下为什么使用 screen 能够避免 HUP 信号的影响。我们先看一下 screen 的帮助信息:
screen - screen manager with VT100/ANSI terminal emulation
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]
DESCRIPTION
full-screen
window manager that multiplexes a physical
terminal between several
(typically
interactive
terminal provides the functions of a DEC VT100 terminal
and, in addition, several control functions from the
and ISO 2022 standards (e.g. insert/delete line and
support for multiple character sets).
There is a
scrollback
each virtual terminal and a copy-and-paste mechanism that
allows moving text regions between windows.
用screen -dmS&session name来建立一个处于断开模式下的会话(并指定其会话名)。使用 screen 很方便,有以下几个常用选项:
用screen -list&来列出所有会话。
用screen -r&session name来重新连接指定会话。
用快捷键CTRL-a d&来暂时断开当前会话。
screen 示例
[root@pvcent107 ~]# screen -dmS Urumchi
[root@pvcent107 ~]# screen -list
There is a screen on:
12842.Urumchi
(Detached)
1 Socket in /tmp/screens/S-root.
[root@pvcent107 ~]# screen -r Urumchi
当我们用“-r”连接到 screen 会话后,我们就可以在这个伪终端里面为所欲为,再也不用担心 HUP 信号会对我们的进程造成影响,也不用给每个命令前都加上“nohup”或者“setsid”了。这是为什么呢?让我来看一下下面两个例子吧。
1. 未使用 screen 时新进程的进程树
[root@pvcent107 ~]# ping www.google.com &
[root@pvcent107 ~]# pstree -H 9499
init─┬─Xvnc
├─2*[sendmail]
├─sshd─┬─sshd───bash───pstree
└─sshd───bash───ping
我们可以看出,未使用 screen 时我们所处的 bash 是 sshd 的子进程,当 ssh 断开连接时,HUP 信号自然会影响到它下面的所有子进程(包括我们新建立的 ping 进程)。
2. 使用了 screen 后新进程的进程树
[root@pvcent107 ~]# screen -r Urumchi
[root@pvcent107 ~]# ping www.ibm.com &
[root@pvcent107 ~]# pstree -H 9488
init─┬─Xvnc
├─screen───bash───ping
├─2*[sendmail]
总结而使用了 screen 后就不同了,此时 bash 是 screen 的子进程,而 screen 是 init(PID为1)的子进程。那么当 ssh 断开连接时,HUP 信号自然不会影响到 screen 下面的子进程了。
现在几种方法已经介绍完毕,我们可以根据不同的场景来选择不同的方案。nohup/setsid 无疑是临时需要时最方便的方法,disown 能帮助我们来事后补救当前已经在运行了的作业,而 screen 则是在大批量操作时不二的选择了。
本文转载自:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
人打赏支持
码字总数 3099
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断...
1.问题背景 Java是跨平台的,大部分程序也都是在Linux服务器上运行的。但是很多朋友其实对服务器了解并不多,对相关知识也是一知半解。很多概念可能知道,但是并不十分清楚,仅仅是基本运用。...
什么是守护进程 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统...
所有内容搜集于网络,部分做了简单翻译 一、& 在Linux中,当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用命令把作业放到后台执行。实际上,这样是...
http://linux.ctocio.com.cn/179/.shtml 我们经常会碰到这样的问题,用telnet/ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络的不稳定导致任务中途失败。如...
1:下载 wget http://download.redis.io/releases/redis-3.2.8.tar.gz1 下载指定版本,可以登录https://redis.io/download查看 2:安装 tar zxvf redis-3.2.8.tar.gzcd redis-3.2.8makesudo ......
ssh 关闭后仍保持当前运行的进程 由于各种原因,需要通过ssh登录linux或者unix主机,很多时候我们需要通过ssh的终端启动一 些服务或者运行一些程序,但是默认情况下,当我们关闭ssh终端连接,...
Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启。 supe...
Linux 内核正在盯着你,当它检测到系统上运行的某些东西违反了正常内核行为时,它会关闭系统并发出一个“oops”! 如果你检查你的 Linux 系统上运行的进程,你可能会对一个叫做 “kerneloop...
作者: Sandra Henry-stocker
  在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。 进入Docker容器比较常见的几...
JungleKing
没有更多内容
加载失败,请刷新页面
初识Docker 虚拟化技术发展的如火如荼,特别的,在云时代,最为看重的是拼接虚拟化技术所构建的集群处理能力。不同于传统的虚拟化,容器化充分利用了操作系统本身已有的机制和特性,可以实现...
$ git init $ git remote add &本地仓库名称& &远程URL地址& $ git add -all $ git commit -m '提交当前内容的说明' $ git push -u &本地仓库名称& &远程仓库名称&...
keesoftnew
http://www.cnblogs.com/lxf/p/3667824.html
背景: 1.运用包管理工具dep管理引用包2.有些包需要代理,有包是内部包不能用代理 实现: 1.配置socks5代理(略过) 2.安装privoxy 通过brew install privoxy进行安装安装成功后,通过brew info...
允许进入 启用 CORS 请求,将会从特定的 URL 来源中允许进入(Allow Incoming)。URL 格式必须匹配格式 scheme://host[:port],结尾是没有反斜杠的(:port 是可选的)。因此 http://example...
webpack 中使用图片压缩能极大的减少包的大小,对于前端来说也是一个重要的优化点。当前有很多方法都可以实现,不过既然使用 webpack 那我们就应该再懒一点,一次配置以后就不管了,多好,哈...
如图所示, 可能就是yum 源问题
侠客行之石头
Spring现在是我们在开发当中必不可少的框架,几乎所有的java项目都用到了spring框架,但是有时候想一想感觉虽然是每天都在和Spring框架接触,但是好像还真的不太了解它背后的原理,所以最近把...
在项目开发中连接老外的 maven 库下载 jar 包时真的很慢,记得当时太年轻等下载 jar 包等几个小时,但是我们可以配置阿里云国内镜像 ,阿里云是国内 maven 仓库镜像,配置以后,当使用maven...
1. 前端加载图片&img src="" src:是同步加载的,所以是会阻塞进程。消耗比较大。需要规避这种行为 2. 前端的数据:分页到最低渲染需要。不要一次性的加载所有的数据到前端。一定要分页!!!...
没有更多内容
加载失败,请刷新页面
文章删除后无法恢复,确定取消删除此文章吗?
亲,自荐的博客将通过私信方式通知管理员,优秀的博客文章审核通过后将在博客推荐列表中显示
确定推荐此文章吗?
确定推荐此博主吗?
聚合全网技术文章,根据你的阅读喜好进行个性推荐
指定官方社区
深圳市奥思网络科技有限公司版权所有Linux守护进程_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
Linux守护进程
Linux守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。
Linux守护进程简介
守护进程是一个在后台运行并且不受任何终端控制的进程。Unix操作系统有很多典型的守护进程(其数目根据需要或20—50不等),它们在后台运行,执行不同的管理任务。
用户使守护进程独立于所有终端是因为,在守护进程从一个终端启动的情况下,这同一个终端可能被其他的用户使用。例如,用户从一个终端启动守护进程后退出,然后另外一个人也登录到这个终端。用户不希望后者在使用该终端的过程中,接收到守护进程的任何错误信息。同样,由终端键人的任何信号(例如中断信号)也不应该影响先前在该终端启动的任何守护进程的运行。虽然让服务器后台运行很容易(只要shell命令行以&结尾即可),但用户还应该做些工作,让程序本身能够自动进入后台,且不依赖于任何终端。
守护进程没有控制终端,因此当某些情况发生时,不管是一般的报告性信息,还是需由管理员处理的紧急信息,都需要以某种方式输出。Syslog 函数就是输出这些信息的标准方法,它把信息发送给 syslogd 守护进程。
Linux守护进程创建步骤
(1)创建子进程,终止父进程
由于守护进程是脱离控制终端的,因此首先创建子进程,终止父进程,使得程序在shell终端里造成一个已经运行完毕的假象。之后所有的工作都在子进程中完成,而用户在shell终端里则可以执行其他的命令,从而使得程序以僵尸进程形式运行,在形式I上做到了与控制终端的脱离。
(2)在子进程中创建新会话
这个步骤是创建守护进程中最重要的一步,在这里使用的是系统函数setsid。
setsid函数用于创建一个新的会话,并担任该会话组的组长。调用setsid仃三个作用:让进程摆脱原会话的控制、让进程摆脱原进程组的控制和让进程摆脱原控制终端的控制。
在调用fork函数时,全盘拷贝父进程的会话期(session,是一个或多个进程组的集合)、进程组、控制终端等,虽然父进程退出了,但原先的会话期、进程组、控制终端等并没有改变,因此,那还不是真正意义上使两者独立开来。setsid函数能够使进程完全独立出来,从而脱离所有其他进程的控制。
(3)改变工作目录
使用fork创建的子进程也继承了父进程的当前工作目录。由于在进程运行过程中,当前目录所在的文件系统不能卸载,因此,把当前工作目录换成其他的路径,如“/”或“/tmp”等。改变工作目录的常见函数是chdir。
(4)重设文件创建掩码
文件创建掩码是指屏蔽掉文件创建时的对应位。由于使用fork函数新建的子进程继承了父进程的文件创建掩码,这就给该子进程使用文件带来了诸多的麻烦。因此,把文件创建掩码设置为0,可以大大增强该守护进程的灵活性。设置文件创建掩码的函数是umask,通常的使用方法为umask(0)。
(5)关闭文件描述符
用fork新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,可能导致所在的文件系统无法卸载。
Linux守护进程特点
首先,守护进程最重要的特性是后台运行。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符、、和、工作目录以及文件创建等。这些环境通常是守护进程从执行它的(特别是shell)继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在系统启动时从启动脚本/etc/rc.d中启动,也可以由作业控制进程crond启动,还可以由用户终端(通常是shell)执行。
除r这止电以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进样实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。
刘忆智等编著.Linux从入门到精通(第2版):清华大学出版社,2014.02
金国庆,刘加海,季江民,严冰编著.LINUX 程序设计(第2版):浙江大学出版社,2015.08
本词条认证专家为
副教授、副研究员审核
中国科学院工程热物理研究所
清除历史记录关闭Linux操作系统中取消正在执行的命令_Linux教程_Linux公社-Linux系统门户网站
你好,游客
Linux操作系统中取消正在执行的命令
作者:Linux
  在Linux操作系统中可以使用好几种方法终止命令的执行。终止当前正在执行的某个命令最快的方法是按下组合键“Ctrl+C”。这个方法只有在用户能够从某个虚拟控制台上控制这个程序的时候才奏效。终止某个出错程序的另外一个办法是kill(杀)掉它的进程。请按照下面的方法进行操作:  1) 输入“ps”命令获取进程的PID,这个命令要求你是运行这个程序的那个人或者是根用户。如果是根用户,请输入“ps -aux”命令查看所有的进程,不管是谁拥有它们的。  2) 在清单中找到这个出错进程。因为程序的名称列在清单的最右边,通常一眼就可以找到它。  3) 请记下ps命令输出清单中进程状态行最左边的ID数字。  4) 输入“kill ID”,终止该进程。  5) 使用ps命令查看该进程是否仍在运行中。  6) 如果它没有出现在清单中,你就已经完成了操作。如果它还在运行中,请输入“ kill 9 ID”。这个命令就可以达到目的。这个命令强制性地终止了那个进程,并不进行善后工作,因此不到必要的时候最好别使用它。
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款【转】linux下杀死进程(kill)的N种方法
转载一篇,最原始的出处已不可考,望见谅!
 首先,用ps查看进程,方法如下:
00:00:49 gnome-terminal
00:00:00 gnome-pty-helper
0 11:38 pts/0
00:00:02 bash
00:26:28 /usr/lib/firefox-3.6.18/firefox-bin
0 11:38 pts/1
00:00:00 bash
00:00:00 update-notifier
0 21:41 pts/0
00:00:00 ps -ef
0:49 gnome-terminal
0:00 gnome-pty-helper
26:13 /usr/lib/firefox-3.6.18/firefox-bin
0:00 update-notifier
0:00 ps -aux
此时如果我想杀了火狐的进程就在终端输入:
$ kill -s 9 1827
其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。各个终止信号及其作用见附录。
1827则是上面ps查到的火狐的PID。
简单吧,但有个问题,进程少了则无所谓,进程多了,就会觉得痛苦了,无论是ps -ef 还是ps -aux,每次都要在一大串进程信息里面查找到要杀的进程,看的眼都花了。
把ps的查询结果通过管道给grep查找包含特定字符串的进程。管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
$ ps -ef | grep firefox
00:27:33 /usr/lib/firefox-3.6.18/firefox-bin
0 21:54 pts/0
00:00:00 grep --color=auto firefox
这次就清爽了。然后就是
$kill -s 9 1827
还是嫌打字多?
改进2——使用pgrep:
一看到pgrep首先会想到什么?没错,grep!pgrep的p表明了这个命令是专门用于进程查询的grep。
$ pgrep firefox
看到了什么?没错火狐的PID,接下来又要打字了:
$kill -s 9 1827
改进3——使用pidof:
看到pidof想到啥?没错pid of xx,字面翻译过来就是 xx的PID。
$ pidof firefox-bin
和pgrep相比稍显不足的是,pidof必须给出进程的全名。然后就是老生常谈:
$kill -s 9 1827
无论使用ps 然后慢慢查找进程PID 还是用grep查找包含相应字符串的进程,亦或者用pgrep直接查找包含相应字符串的进程PID,然后手动输入给kill杀掉,都稍显麻烦。有没有更方便的方法?有!
$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9
“grep firefox”的输出结果是,所有含有关键字“firefox”的进程。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。
难道你不想抱怨点什么?没错太长了
知道pgrep和pidof两个命令,干嘛还要打那么长一串!
$ pgrep firefox | xargs kill -s 9
$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9
kill: No such process
有一个比较郁闷的地方,进程已经正确找到并且终止了,但是执行完却提示找不到进程。
其中awk '{print $2}' 的作用就是打印(print)出第二列的内容。根据常规篇,可以知道ps输出的第二列正好是PID。就把进程相应的PID通过xargs传递给kill作参数,杀掉对应的进程。
难道每次都要调用xargs把PID传递给kill?答案是否定的:
$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`
没错,命令依然有点长,换成pgrep。
$kill -s 9 `pgrep firefox`
改进9——pkill:
看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。
$pkill -9 firefox
说明:"-9" 即发送的信号是9,pkill与kill在这点的差别是:pkill无须 “s”,终止信号等级直接跟在 “-“ 后面。之前我一直以为是 "-s 9",结果每次运行都无法终止进程。
改进10——killall:
killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。
$killall -9 firefox
附录:各种信号及其用途
Description
Signal number on Linux x86[1]
Process aborted
Signal raised by alarm
Bus error: "access to undefined portion of memory object"
Child process terminated, stopped (or continued*)
Continue if stopped
Floating point exception: "erroneous arithmetic operation"
Illegal instruction
Kill (terminate immediately)
Write to pipe with no one reading
Quit and dump core
Segmentation violation
Stop executing temporarily
Termination (request to terminate)
Terminal stop signal
Background process attempting to read from tty ("in")
Background process attempting to write to tty ("out")
User-defined 1
User-defined 2
Pollable event
Profiling timer expired
Bad syscall
Trace/breakpoint trap
Urgent data available on socket
Signal raised by timer counting virtual time: "virtual timer expired"
CPU time limit exceeded
File size limit exceeded
通过进程名批量kill指定进程
kill与kill -9的区别
kill -9 杀不死的进程处理办法
linux kill -9 杀不掉的进程
kill -9都杀不掉的进程
Linux进程KILL不掉的原因
linux下kill -9 pid 强制不能杀掉进程
linux杀死进程的五种方法
没有更多推荐了,
(window.slotbydup=window.slotbydup || []).push({
id: "5865577",
container: s,
size: "300,250",
display: "inlay-fix"}

我要回帖

更多关于 安卓防止进程被系统关闭 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信