例如,当我运行下面的脚本时,如果我发送一个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
: