Linux 下使用 killall 命令终止进程

Linux 下使用 killall 命令终止进程


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

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

默认情况下,killall 命令将向一个/组进程发送一个  SIGTERM  信号,但是,也可以通过参数发送一个指定的信号。

下面我们通过例子详细介绍 killall 的 8 大用法。

1. 基本用法

假如我们 3 个进程在运行,分别是  hello1, hello2, hello3  ,现在我们想杀死 hello1 进程,可以直接使用如下方式:

killall hello1

运行的结果如下:

[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin    12061  0.0  0.0   4152   344 pts/0    S    14:41   0:00 ./hello1
alvin    12074  0.0  0.0   4152   344 pts/0    S    14:41   0:00 ./hello2
alvin    12084  0.0  0.0   4152   340 pts/0    S    14:41   0:00 ./hello3
alvin    12089  0.0  0.0 112648   964 pts/0    R+   14:41   0:00 grep --color=auto hello
[alvin@VM_0_16_centos test]$ killall hello1
[1]   Terminated              ./hello1
[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin    12074  0.0  0.0   4152   344 pts/0    S    14:41   0:00 ./hello2
alvin    12084  0.0  0.0   4152   340 pts/0    S    14:41   0:00 ./hello3
alvin    12170  0.0  0.0 112648   964 pts/0    R+   14:42   0:00 grep --color=auto hello

可以看到,hello1 进程已经被杀死了。

剩下的 hello2 和 hello3 进程,我们想一次性杀死他们,也就是批量杀死进程,可以如下操作:

[alvin@VM_0_16_centos test]$ killall hello*
hello: no process found
hello1: no process found
hello.c: no process found
[2]-  Terminated              ./hello2
[3]+  Terminated              ./hello3

如此,以 hello 开头的进程全部被干掉。

2. 终止某个用户所运行的进程

我们可以杀死以满足某个正则表达式的一组进程,同样的,我们也可以杀死某个用户运行的所有进程。

比如,用户 harry 现在运行如下几个进程:

[alvin@VM_0_16_centos test]$ ps aux | grep harry
root     13675  0.0  0.2 148236  5584 ?        Ss   14:55   0:00 sshd: harry [priv]
harry    13677  0.0  0.1 148236  2944 ?        S    14:55   0:00 sshd: harry@pts/1
root     13678  0.0  0.2 148236  5444 ?        Ss   14:55   0:00 sshd: harry [priv]
harry    13680  0.0  0.1 148236  2252 ?        S    14:55   0:00 sshd: harry@notty
harry    13681  0.0  0.1  53228  2168 ?        Ss   14:55   0:00 /usr/libexec/openssh/sftp-server
harry    13694  0.0  0.1 116436  3252 pts/1    Ss+  14:55   0:00 -bash
harry    13948  0.0  0.0   4152   344 pts/1    S    14:57   0:00 ./hello1
harry    13952  0.0  0.0   4152   344 pts/1    S    14:57   0:00 ./hello2
harry    13959  0.0  0.0   4152   344 pts/1    S    14:57   0:00 ./hello3
alvin    14005  0.0  0.0 112648   964 pts/0    R+   14:58   0:00 grep --color=auto harry

我们现在想杀死 harry 所运行的所有进程,可以以如下方式操作:

killall -u harry

运行结果如下:

[alvin@VM_0_16_centos test]$ sudo killall -u harry
[alvin@VM_0_16_centos test]$ ps aux | grep harry
alvin    14040  0.0  0.0 112648   964 pts/0    R+   14:58   0:00 grep --color=auto harry
但是,这个选项要慎用,因为它会把该用户所有进程,包括终端进程,全部杀死,将导致该用户直接退出。所以,如果不想挨揍的话不要轻意尝试这个选项。
3. 终于时间的方式终止进程

假如我们现在运行了很多程序,我们只想杀死运行时间超过 5h 的进程,那么可以使用  -o  选项,其中 o 代表 older 如下:

killall -o 5h

同样地,如果你想杀死进行时间小于 4h 的进程,那么可以使用  -y  选项,其中 y 代表 younger ,如下:

killall -y 4h

这两个选项同样非常粗暴,也会把终端退出,所以先不演示了。

4. 忽略大小写

默认情况下,killall 命令是大小写敏感的,所以我们如果写错大小写,将无法正确杀死进程。

[alvin@VM_0_16_centos test]$ killall HELLO1
TEST1: no process found

如果我们想忽略大小写,可以加上  -I  (大写字母 i )选项。

[alvin@VM_0_16_centos test]$ killall -I HELLO1
[1]   Terminated              ./hello1
5. 关闭命令执行回显

默认情况下,killall 会告诉你命令执行情况,但是,我们如果不关心它的执行结果,只想让它静默执行,该怎么办?只需加上  -q  选项即可,其中 q 表示 quite , 如下:

[alvin@VM_0_16_centos test]$ killall HELLO2
HELLO2: no process found
[alvin@VM_0_16_centos test]$ killall -q HELLO2
[alvin@VM_0_16_centos test]$
6. 列出所有支持的信号

如前文所述,默认情况下,killall 命令将发送 SIGTERM 信号,那么,安可以发送其它信号吗?当然是可以的。可以使用  -l  选项查看 killall 所支持的所有信号:

[alvin@VM_0_16_centos test]$ killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

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

7. 交互式操作

如果你在杀死多个进程时不太放心,担心把不该杀死的进程给杀死了,那么你可以使用  -i  选项,这样就可以自由决定哪些进程应该被杀死,哪些进程应该被保留。

[alvin@VM_0_16_centos test]$ killall -i hello*
Kill hello2(13825) ? (y/N) y
Kill hello3(13831) ? (y/N) N
hello: no process found
hello1: no process found
hello3: no process found
hello.c: no process found
[2]-  Terminated              ./hello2
8. 等待直到某个进程被终止

当一个信号被发送至某个进程,如果你想确定该进程已经被杀死了才返回执行结果,可以使用  -w  选项,其中 w 代表 wait ,如下:

[alvin@VM_0_16_centos test]$ killall -w hello1
[4]+  Terminated              ./hello1

这里好像看不出什么效果,但实际执行的时候,可以发现执行结果会在一两秒后出现,而不加 -w 选项的话,执行结果马上就显示。




About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● weixin群:可加我weixin,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2019-03-01 06:00 ~ 2019-03-31 24:00 在魔都完成

● 最新修改时间:2019-03-01 06:00 ~ 2019-03-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书 http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班 http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页 https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2640059/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2640059/

<think>好的,用户的问题是在安卓系统中使用killall命令终止进程的方法或教程。首先,我需要回想一下安卓系统的基础知识。安卓是基于Linux内核的,所以很多Linux命令理论上可以在安卓上使用,但实际环境可能有所不同。用户提到的killall命令,通常在Linux中用来根据进程终止进程,但安卓的默认shell环境可能没有预装这个命令,或者有不同的可用参数。 接下来,我需要确认killall在安卓中的可用性。根据引用[3]中提到,在非Linux系统上使用killall可能不会达到预期效果,特别是特权用户需要小心。这说明安卓可能没有直接支持killall命令,或者需要特定条件才能使用。因此,用户可能需要安装额外的工具,比如busybox,它提供了更多标准的Unix命令。 然后,考虑用户可能没有root权限的情况。如果没有root,普通用户可能只能终止自己拥有的进程,而系统进程可能需要更高权限。因此,使用kill命令配合进程ID可能更可靠,但用户希望用进程名来终止,这就需要结合ps或pgrep来查找进程ID。 另外,引用[1]提到了kill命令使用方法,而引用[2]讨论了Android进程管理机制。用户可能需要知道如何正确获取进程名,并确保有足够的权限。例如,使用adb shell时可能需要su权限才能终止系统进程。 总结步骤:首先检查是否有killall命令,如果没有则安装busybox;使用ps或pgrep查找进程名对应的PID,再用kill命令终止;或者使用busybox提供的killall。同时提醒用户权限问题和可能的风险,比如误杀重要进程导致系统不稳定。</think>### 安卓系统中使用 `killall` 命令终止进程的详细方法 #### 一、`killall` 命令在安卓中的限制 安卓系统基于 Linux 内核,但默认的终端环境(如 `adb shell`)可能未预装完整的 `killall` 命令。若直接输入 `killall` 可能提示 `command not found`[^3]。需通过以下方法实现类似功能: --- #### 二、实现 `killall` 功能的两种方案 ##### 方案 1:通过 `busybox` 扩展命令集 1. **安装 `busybox`** - 若设备已 Root,可通过以下命令安装: ```bash adb push busybox /system/xbin && adb shell chmod 755 /system/xbin/busybox ``` - 未 Root 设备可使用第三方工具(如 Termux)集成 `busybox`。 2. **使用 `busybox killall`** ```bash adb shell busybox killall <进程名> ``` **示例**:终止所有名为 `com.example.app` 的进程: ```bash adb shell busybox killall com.example.app ``` ##### 方案 2:手动查找 PID 并终止 1. **通过 `ps` 或 `pgrep` 查找进程** ```bash adb shell ps | grep <进程名> # 或使用 pgrep(需支持) adb shell pgrep <进程名> ``` 2. **使用 `kill` 命令终止进程** ```bash adb shell kill -9 $(adb shell pgrep <进程名>) ``` **示例**:终止所有 `chrome` 进程: ```bash adb shell kill -9 $(adb shell pgrep chrome) ``` --- #### 三、注意事项 1. **权限问题** - 终止系统进程需 **Root 权限**,普通进程可通过 `adb` 直接操作。 - 未 Root 设备需启用 `USB调试` 并授权 ADB 权限。 2. **风险提示** - 错误终止系统关键进程可能导致系统崩溃[^3]。 - 建议先通过 `ps` 确认进程名称和 PID。 --- #### 四、替代方案推荐 若需自动化终止进程,可通过编写 Shell 脚本: ```bash #!/system/bin/sh pkg_name="com.example.app" for pid in $(pgrep $pkg_name); do kill -9 $pid done ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值