Linux笔记之killall、kill、pkill对比
Linux笔记之killall、kill、pkill对比
code review!
文章目录
1.killall
和pkill
在Linux系统中,killall
和pkill
是两个用于终止进程的命令,但它们的工作方式略有不同。
killall
killall
命令用于根据进程名称杀死进程。它会向所有与指定名称匹配的进程发送一个信号(默认为SIGTERM,终止信号)。如果有多个进程的名称与指定的名称相同,killall
会向它们所有人发送信号。
killall <options> <process_name>
<process_name>
: 要终止的进程的名称。<options>
: 可以指定发送的信号类型。例如,-9
发送SIGKILL信号,强制杀死进程。
示例:终止所有名为myapp
的进程。
killall myapp
要小心使用killall
,因为在不同的系统上,如系统V和BSD变体,killall
的行为可能完全不同。在某些系统上,killall
可能会杀死所有进程,而不仅仅是与指定名称匹配的进程。
pkill
pkill
命令可以更灵活地匹配进程。它基于给定的模式来匹配进程的名称或其他属性,并发送信号。
pkill <options> <pattern>
<pattern>
: 用于匹配进程的模式。<options>
: 提供额外的匹配选项或指定发送的信号类型。
示例:发送SIGTERM信号到所有进程名称中包含myapp
的进程。
pkill myapp
与killall
不同,pkill
可以使用正则表达式来匹配进程,提供了更大的灵活性。例如,你可以匹配所有以“my”开头的进程:
pkill '^my'
pkill
还提供了额外的匹配选项,如-u
用于指定用户,-t
用于指定终端等。
注意事项
- 在使用这些命令时,请确保您有权终止目标进程,因为终止系统进程或其他用户的进程可能会影响系统稳定性或安全性。
- 使用
-9
或SIGKILL信号杀死进程可能会导致进程无法清理其使用的资源。只有在进程不响应其他信号时才应该使用。
示例,展示了如何使用killall
和pkill
:
终止所有名为httpd
的进程:
killall httpd
或者使用pkill
:
pkill httpd
如果你想要终止用户bob
拥有的所有进程:
pkill -u bob
再次强调,在使用这些命令时要格外小心,以避免不必要的系统问题。
killall
和 kill
是两个用于发送信号给进程的不同Linux命令,它们的使用场景和行为有所不同。
2.kill
和killall
kill
kill
命令是用来发送特定信号到特定的进程。使用 kill
时,你需要知道进程的PID(进程ID)。
kill <signal> <pid>
<signal>
: 你想要发送的信号,可以是数字形式或者是SIG
形式的名字(例如,SIGTERM
,SIGKILL
,SIGSTOP
等)。如果没有指定信号,kill
会发送SIGTERM
。<pid>
: 目标进程的进程ID。
示例:终止PID为1234的进程。
kill 1234
或者发送SIGKILL信号以强制终止:
kill -9 1234
kill
命令通常用于当你知道进程的PID时,要向该进程发送信号。
killall
killall
是根据进程的名称来发送信号,它会向所有匹配该名称的进程发送信号。
killall <options> <process_name>
<process_name>
: 要发送信号的进程名。<options>
: 指定发送的信号类型,或者其他选项。
示例:终止所有名为 myapp
的进程。
killall myapp
killall
命令在你想要终止所有名为某个名字的进程时非常有用,而不是只终止一个特定的PID。
对比
kill
需要PID来标识目标进程,而killall
根据进程的名称来定位进程。kill
可以非常精确地控制要发送信号的单个进程,killall
则会作用于所有匹配名称的进程。kill
通常在知道具体进程ID时使用,killall
更适合于批量操作,或者当不知道进程ID只知道名称时使用。kill
在所有Unix-like系统上表现一致,而killall
在不同系统上可能表现不同(如在某些系统上,killall
可能会杀死所有进程)。
在使用 kill
和 killall
命令时,需要确保了解它们的行为,以防止意外终止重要进程。特别是在使用强制终止信号(如SIGKILL)时要格外小心。
3.SIGKILL信号和数字9的关系
SIGKILL
是一个信号,在Unix和类Unix操作系统中用于立即强制终止一个进程。在信号列表中,SIGKILL
通常定义为信号9
。
下面是一些关于SIGKILL
信号的关键点:
- 不可捕获或忽略:与大多数其他信号不同,进程不能捕获或忽略
SIGKILL
信号。这意味着进程无法执行任何清理操作或拒绝被杀死。 - 强制终止:
SIGKILL
是一个强制性的终止信号,它告诉操作系统立即停止进程,而不给该进程任何执行任何关闭或清理例程的机会。 - 使用场景:
SIGKILL
通常作为最后的手段使用,当进程无响应(即无法正常终止)或者无法被SIGTERM
(信号15
,默认的终止信号)终止时。 - 系统响应:操作系统保证响应
SIGKILL
信号,这意味着如果进程处于可以被操作系统终止的状态,那么它将被终止。 - 资源释放:由于
SIGKILL
不允许进程执行任何清理操作,所以由该进程打开的文件和网络连接可能不会得到正常关闭,且内存中的数据可能无法保存。
在Linux中,你可以使用kill
命令发送SIGKILL
信号:
kill -9 <pid>
或者,使用killall
命令来发送SIGKILL
信号给指定名称的所有进程:
killall -9 <process_name>
其中,<pid>
是你想要终止的进程的进程ID,<process_name>
是你想要终止的进程的名字。
需要注意的是,虽然SIGKILL
是非常有效的杀死进程的方法,但它不应该被滥用。在尝试SIGKILL
之前,应该首先尝试使用SIGTERM
来给予进程一个正常清理和安全退出的机会。此外,SIGKILL
可能不会终止处于内核态执行系统调用的进程,因为内核可能需要完成这些调用。
原文地址:https://blog.csdn.net/weixin_43297891/article/details/135855973
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!