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

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

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

#!/bin/bash

trap 'echo signal received!!' SIGINT

echo "The script pid is $$"
sleep 30

答案1

不同之处在于,当您Ctrl-C按下核心SIGINT将向您的脚本和命令发送信号sleep(即它将向整个脚本发送信号)进程组),但kill -INT $pid你只是发出信号$pid(据说是你的脚本)。

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

相关内容