使用“Ctrl + C”和“kill -2”命令发送信号有什么区别?

tes*_*ter 3 bash signals

例如,当我运行下面的脚本时,如果我使用Ctrl + C发送INT信号,脚本文件会立即中断。但是,当我尝试使用 Kill 命令执行相同的过程时,该命令预计会完成以使中断信号有效。究竟是什么原因造成这种情况呢?kill -2 pidsleep

#!/bin/bash

trap 'echo signal received!!' SIGINT

echo "The script pid is $$"
sleep 30
Run Code Online (Sandbox Code Playgroud)

小智 7

不同之处在于,当您按下时,内核Ctrl-C将向您的脚本和命令发送信号(即它将向整个进程组发送信号),但您仅发送信号(假设是您的脚本)。SIGINTsleepkill -INT $pid$pid

假设您的脚本是从典型的交互式 shell 启动的(即该脚本是进程组领导者),只需否定 pid 即可kill -INT -$pid