Linux是如何结束一个进程的?

你是否曾经遇到过启动应用程序,而在使用该应用程序时突然变得无响应并意外崩溃的情况?你尝试再次启动该应用程序,但没有任何反应,因为原始应用程序进程从未真正完全关闭。

普通用户可以杀死自己的进程,但不能杀死属于其他用户的进程,而root用户可以杀死所有进程。

系统kill信号

killkillall可以将给定信号发送到指定的进程或进程组。当没有指定信号时,两个工具都会发送-15(-TERM)。

最常用的信号是:

  • 1(-HUP):重新启动进程。
  • 9 (-KILL):杀死一个进程。
  • 15 (-TERM):正常停止进程。

可以通过三种不同的方式指定信号:

  • 使用带有SIG前缀(例如-SIGHUP)
  • 使用数字(例如-1)
  • 不带SIG前缀(例如-HUP) 。

使用-l选项列出所有可用信号:

kill -l  # or killall -l

1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

使用kill命令终止进程

要使用kill命令终止进程,首先需要找到进程PID。你可以使用不同的命令来执行此操作,例如top, ps ,pidofpgrep

假设我们的Firefox浏览器已无法响应,你需要取消Firefox进程。要找到过程PID,请使用pidof命令:

pidof firefox

以上命令将显示所有Firefox进程:

2551 2514 1963 1856 1771

一旦你知道Firefox处理PID以终止所有PID,请输入:

kill -9 2551 2514 1963 1856 1771

使用killall命令终止进程

killall命令终止与指定名称匹配的所有程序。

使用与之前相同的方案,我们可以通过键入以下命令来终止Firefox进程:

killall -9 firefox

killall接受几个选项,例如指定使用用户身份运行的进程,使用正则表达式以及根据创建时间终止进程。你可以通过键入killall(不带任何参数)来获得所有选项的列表。

例如,如果我们要终止以用户身份运行的所有进程rumenz,则可以运行以下命令:

killall -u rumenz

杀死运行时间超过 5h 的进程

killall -o 5h

杀死进行时间小于 4h 的进程

killall -y 4h

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

killall -I NGINX

等待直到某个进程被终止,可以使用 -w 选项,其中 w 代表 wait

killall -w

使用pkill命令终止进程

pkill使用正则表达式来匹配进程名称。

ps -eo pid,cmd  | grep ssh
1039 sshd
2257 ssh-agent
6850 ssh
31279 ssh-agent

通过正则批量关闭

pkill '^ssh$'


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注