Linux关闭与切换进程相关的信号:SIGINT、SIGKILL、SIGTERM、SIGSTOP

参考

Linux中ctrl-c, ctrl-z, ctrl-d 区别
ctrl-d ( Terminate input, or exit shell ) 一个特殊的二进制值,表示 EOF,作用相当于在终端中输入exit后回车;
ctrl-/ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件;
ctrl-s 中断控制台输出;
ctrl-q 恢复控制台输出;
ctrl-l 清屏。

Linux命令kill和signal
kill <pid> : 发送SIGTERM信号到指定进程,如果进程没有捕获该信号,则进程终止。
kill -l:列出所有信号名称及数值。
kill -l <signame> :显示指定信号的数值。
kill -9 <pid> :强制杀掉指定进程,无条件终止指定进程。
kill %<jobid>:杀掉指定的任务(使用jobs命令可以列出)。
kill -QUIT <pid> or kill -3 <pid> :使得程序正常的退出。

基础知识

  1. 使用kill -l命令查看信号种类
    在这里插入图片描述
  2. Linux中的前台进程与后台进程区别:
    LINUX后台进程也叫守护进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 一般用作系统服务,可以用crontab提交(Linux crontab是用来定期执行程序的命令),编辑或者删除相应的作业。 守护的意思就是不受终端控制。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
  3. 下面是常用的信号:
    HUP 1 终端断线
    INT 2 中断(同 Ctrl + C)
    QUIT 3 退出(同 Ctrl + \)
    TERM 15 终止
    KILL 9 强制终止
    CONT 18 继续(与STOP相反, fg/bg命令)
    STOP 19 暂停(同 Ctrl + Z)

SIGINT信号

ctr+c触发:(kill foreground process) 发送 SIGINT 信号给前台进程组中的所有进程强制终止程序的执行;(INT -> interrupt) -> 只能终止前台进程组中的所有进程

SIGSTOP信号

ctrl+z触发: ( suspend foreground process ) 发送 SIGSTOP 信号给前台进程组中的所有进程,常用于挂起一个进程,而并非结束进程,用户可以使用使用fg/bg操作恢复执行前台或后台的进程。

fg、bg让你的进程在前后台之间切换
在一个命令最后加&,可以将这个命令放到后台执行。如./build/Server &
jobs指令:查看当前有多少在后台运行的命令
fg指令:将后台中的命令调至前台继续运行
bg指令:将一个在后台暂停的命令,变成继续执行

SIGTERM信号与SIGKILL信号

kill <PID>发送SIGTERM信号到指定进程,如果进程没有捕获该信号,则进程终止。SIGTERM是程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。
Linux C实践(1):不可忽略或捕捉的信号—SIGSTOP和SIGKILL
linux中的信号 SIGINT SIGTERM SIGKILL
SIGKILL:kill -9 <PID> 会发送这个信号,用来强制使进程立即结束。
SIGKILL是不能被捕获的,程序收到这个信号后,一定会退出。这就是kill -9一定能保证将程序杀死的原因。

示例1

前台启动服务器进程 -> ctrl+z挂起前台的进程,使其进入后台并暂停 -> bg将后台中暂停的命令继续执行 -> fg将后台中的命令调至前台继续运行 -> ctrl+c结束前台进程。
在这里插入图片描述

示例2

启动服务器命令最后加&,服务器在后台执行 -> ctrl+c无法结束后台的服务器进程 -> kill pid发送SIGTERM信号,结束服务器进程。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/XindaBlack/article/details/106956137