五个你可能不了解的killall选项(转载)_c++ killall 把自己杀了-程序员宅基地

转载于:https://linux.cn/article-2973-1.html

Linux的命令行提供很多命令来杀死进程。比如,你可以向“kill”命传递一个PID来杀死进程;“pkill”命令使用一个正则表达式作为输入,所以和该模式匹配的进程都被杀死。

但是还有一个命令叫“killall”,默认情况下,它精确地匹配参数名,然后杀死匹配进程。在这篇文章中,我们将讨论有关这个命令的实际应用。

Linux 的 killall 命令

killall命令可以用来给一个特定的进程发送一个信号。这个信号默认情况下是SIGTERM,但也可以由killall命令使用参数来指定其它信号。

现在让我们通过一些实际的例子来看看这个命令的实际用法。

1. 基本示例

在这个例子中,我们将使用killall来杀死特定进程。假如,有两个开头字符相同的进程:

 
 
  
  1. $ ps -aef | grep test
  2. himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test
  3. himanshu 3970 2811 0 14:14 pts/0 00:00:00 ./test_again

如何杀死“test_again”进程呢?

 
 
  
  1. $ killall test_again
  2. [2]+ Terminated ./test_again

如你所见,killall命令终止了“test_again”进程。你可以通过ps命令来确认这个事实:

 
 
  
  1. $ ps -aef | grep test
  2. himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test

你可以观察到“test_again”没有被显示出来,因为它已经被杀死了。

2. 使用 -I 选项忽略大小写

默认情况下,killall命令是大小写敏感的。例如:

 
 
  
  1. $ ps -aef | grep test
  2. himanshu 4177 3161 0 14:54 pts/3 00:00:00 ./test
  3. himanshu 4178 3161 0 14:54 pts/3 00:00:00 ./test_again
  4. himanshu 4180 3161 0 14:54 pts/3 00:00:00 grep --color=auto test
  5.  
  6. $ killall TEST
  7. TEST: no process found

你可以看到,killall命令找不到叫做“TEST”的进程,但是“test”进程是确确实实的在运行的。

来让killall命令忽略大小写,可以使用-I选项(大写i)。例如:

 
 
  
  1. $ killall -I TEST
  2. [1]- Terminated ./test

你可以观察到,现在你成功的终止了“test”进程。

3. 使用 -i 选项交互式的终止进程

killall命令可以用来终止多个进程。

 
 
  
  1. $ killall test test_again
  2. [2]- Terminated ./test_again
  3. [3]+ Terminated ./test

但是,如果你想要killall交互式地来终止进程,你可以使用-i选项。

这里是例子:

 
 
  
  1. $ killall -i test test_again
  2. Kill test(4201) ? (y/N) y
  3. Kill test_again(4202) ? (y/N) y
  4. [1]- Terminated ./test
  5. [2]+ Terminated ./test_again

你可以看到,用这种方式,在同时终止多个进程时,用户可以控制是否终止某一个进程。

4. 使用 -q 选项关闭命令执行回显

有些时候,当killall找不到指定的进程时,它就会像下面这样输出错误信息。

 
 
  
  1. $ killall TEST
  2. TEST: no process found

但是,当你想要killall执行地安安静静的话,你就可以使用-q选项:

 
 
  
  1. $ killall -q TEST
  2. $

如你所见,-q选项被使用之后,killall命令的输出信息就被抑制了。

5. 使用-l选项列出所有支持的信号(signal)

如之前描述的一样,killall向进程发送信号。

你可以使用-s选项(后面跟一个信号名)来向一个进程发送特殊信号。

想要知道所有可以发送的信号,可以使用-l选项(小写L)来获取:

 
 
  
  1. $ killall -l
  2. HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
  3. STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
  4. UNUSED

killall支持上面的所有信号。

看着这些信号的名字,可能你心里就会嘀咕:这些信号都是干什么的?

译者注:使用下面的命令来获取所有信号的说明:

$ man 7 signal

我需要和大家讨论一件事情

killall命令的man说:假如进程的名字的长度小于等于15,默认情况下就会以完整名称匹配。

比如,假设有两个名字很长的进程:

 
 
  
  1. $ ps -aef | grep test
  2. himanshu 4021 3161 0 14:27 pts/3 00:00:00 ./test_abcdefghij
  3. himanshu 4035 3161 0 14:27 pts/3 00:00:00 ./test_abcdefgh

第一个进程的名字有15个字符。现在,让我们试着使用killall杀死这个进程:

 
 
  
  1. $ killall test_abcdefghij
  2. [1]- Terminated ./test_abcdefghij

如你所见,killall命令成功杀死了这个进程。

假如,两个进程的名字都超过15个字符,根据man,killall将把两个进程全部杀死。比如:

 
 
  
  1. $ ps -aef | grep test
  2. himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
  3. himanshu 4141 3161 0 14:46 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwxyz
  4. himanshu 4143 3161 0 14:46 pts/3 00:00:00 grep --color=auto test

你可以观察到,两个进程的名字都超过15个字符。现在,当我使用killall试着杀死第二个进程时:

 
 
  
  1. $ killall test_abcdefghijklmnopqrstuvwxyz
  2. [6]+ Terminated ./test_abcdefghijklmnopqrstuvwxyz

它只杀死了指定的进程,另一个则没有被杀死。

 
 
  
  1. $ ps -aef | grep test
  2. himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
  3. himanshu 4146 3161 0 14:47 pts/3 00:00:00 grep --color=auto test

我不太确定,是我进行的尝试中有不对的地方,还是这是killall的一个bug。假如你在评论中写上你的观点,我会非常感激。

顺便说一下,这是我机器上killall命令的版本信息:

 
 
  
  1. $ killall --version
  2. killall (PSmisc) 22.20
  3. Copyright (C) 1993-2012 Werner Almesberger and Craig Small
  4.  
  5. PSmisc comes with ABSOLUTELY NO WARRANTY.
  6. This is free software, and you are welcome to redistribute it under
  7. the terms of the GNU General Public License.
  8. For more information about these matters, see the files named COPYING.

via: http://linoxide.com/linux-command/linux-killall-my-options/

译者:intermerlin 校对:wxy

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013258415/article/details/78775269

智能推荐

couple Maillot Cyclisme 2013 de couleurs-程序员宅基地

文章浏览阅读97次。Le 1er style. est généralement un fourre-tout, qui est créé par le vrai cuir de haute qualité avec meublée notamme...

计算机网络参考模型-程序员宅基地

文章浏览阅读1.7k次。在计算机的网络中,有两个十分重要的参考模型,所有网络通信设备都是以参考模型为标准来研发的。因此熟知参考模型在学习网络知识的过程中是十分重要的。下面就简单的介绍一下两个参考模型。一、OSI参考模型 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在198...

分布式搜索引擎ElasticSearch之IK分词器(三)_搜索姓名使用ik_smart-程序员宅基地

文章浏览阅读265次。继上篇文章https://blog.csdn.net/qq_39772439/article/details/1213707733.IK分词器 4.1什么是IK分词器 我们在浏览器地址栏输入http://127.0.0.1:9200/_analyze?analyzer=chinese&pretty=true&text=我是程序员,浏览器显示效果如下 默认的中文分词是将每个字看成一个词,这显然是不符合要求的,所以我们需要安装中 文分词器来解决这个问题。 IK分词是一款._搜索姓名使用ik_smart

GNS3的安装过程_gns3下载教程-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏11次。GNS3的安装过程一:为什么要安装GNS3GNS3是一款可以运行在多平台的网络虚拟软件,可以通过它来完成相关的实验模拟操作或者检验真实的路由器上实施的相关操作。二:安装环境1、系统版本:windows 10(其他系统也行)2、客户端版本:GNS3-1.3.10-all-one三:安装步骤这里我把安装包的链接放在这,大家可自行下载链接: https://pan.baidu.com/s..._gns3下载教程

Unity 与 NDK开发_unity ndk-程序员宅基地

文章浏览阅读2k次。文章目录Unity 与 C++NDK开发动态链接库NDKUnity 与 C++C#是Unity的官方推荐的开发语言。如果某些逻辑需要C++支持以提供高性能特性,或者需要C++去跟底层硬件或者操作系统级别的接口交互,那么就需要用C#去调用C++的接口。这往往依赖动态链接。即用C++开发动态链接库,然后C#调用动态链接库里暴露的接口。而在Android上开发动态链接库(.so文件)的方法,就是NDK开发。NDK开发动态链接库NDKNDK 全称原生开发工具包(Native Development K_unity ndk

从图灵奖看计算机科学技术发展史的缩影 _图灵奖获得者精神品质-程序员宅基地

文章浏览阅读1.9k次。从1966年颁发图灵奖至今,已有近40个年头,共计有40多名科学家获此殊荣,其中美国学者最多,此外还有英国、瑞士、荷兰、以色列、挪威等国少数学者,也包含一名美籍华人。图灵奖颁发的历史,实际上是计算机科学技术发展史的缩影,而且从图灵奖获得者身上,我们会受到很多有益的启迪。 一。.图灵和图灵奖:1. 图灵是计算机科学技术的奠基人 阿伦 ·图灵(Alan Mathison Turi_图灵奖获得者精神品质

随便推点

深入Redis持久化_命令追加的格式是redis命令请求的协议格式-程序员宅基地

文章浏览阅读256次。一、Redis高可用概述在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999% 等等)。但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失..._命令追加的格式是redis命令请求的协议格式

文字小游戏-程序员宅基地

文章浏览阅读331次。练习一1、定义主函数main()  实现输入名字,通过format格式化字符串2、运行main()# -*- coding: UTF-8 -*-def main(): name = input('请输入名字:') other_name = input('请再输入名字:') print('{}去买车,需要10万元,可{}只带了现金99998元,就差..._微信小游戏文字类

java多层map初始化_多重map初始化-程序员宅基地

文章浏览阅读1.8k次。因为聚合需求,一开始构造了一个四层map,由于放入实例前需要先判断前面的map存不存在,如果不存在则要new新的map,并把数据放进去,一开始直接if else写写了两百多行。cr之后觉得很丑陋,就寻找简单的方法去重写。首先将map结构重新规划,将一些固定的值从map中去除,将中间两层的键用连接符合并,在输出时再做拆分,这样四层的map就简化成了两层。针对实例化的问题,使用如下代码:Map&..._多重map初始化

80x86 汇编语言编程:排序与显示_8086编程完成将10个数(自设定)按从大到小顺序排序。-程序员宅基地

文章浏览阅读1.1k次。编写完整的汇编语言源程序。对任意给定的十个无符号数按由大到小排序,并把排序结果在显示器上显示。要求用简化的段定义结构,采用子程序设计方法。谢谢 急求 !!!题目链接:http://zhidao.baidu.com/question/583620100做而论道编程如下:   2013-08-22 10:53 .MODEL SMALL.STACK 200H.DATA NUM1 DW _8086编程完成将10个数(自设定)按从大到小顺序排序。

Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制-程序员宅基地

文章浏览阅读293次。封面图片:《Python可以这样学》,ISBN:9787302456469,董付国,清华大学出版社图书详情(京东):=================关于朴素贝叶斯算法中文垃圾邮件分类,可..._python任调整文本顺序,对抗垃圾邮件检测

PCI MSI parse in ACPI_irq_find_matching_fwnode-程序员宅基地

文章浏览阅读712次。This document analyzes how to parse ITS configuration in Linux kernel, focus on ACPI code_irq_find_matching_fwnode

推荐文章

热门文章

相关标签