(Bash、终端)为什么终止脚本热键不起作用(例如 ctrl-c、ctrl-z)

问题描述 投票:0回答:1

当我尝试通过 ctrl-z 或 ctrl-c 终止脚本时,它们被解释为输入而不是命令。 我在虚拟机上使用 linux (fedora 37)

终端:

[me@meVPC ~]$ ./time_logger
9698
^C
^C
^Z

脚本: `

#!/bin/bash

log_file="time_log.txt"
signal_script="script_logger"

# Start the signal script
bash $signal_script &

# Function to send signals
send_signal() {
    signal=$1
    pkill -RTMIN+$signal -f $signal_script

}

# Signal handling
trap 'send_signal 2' SIGINT   # Signal for script stop
trap 'send_signal 3' SIGTSTP   # Signal for script pause
trap 'send_signal 4'  SIGCONT  #signal for script continue

send_signal 1               #sending signal that script started
echo $$                      #showing PID of this process

while true
    do
    current_time=$(date +"%Y-%m-%d %H:%M:%S")
    echo "$current_time" >> $log_file
    sleep 60
done`

我尝试从另一个 bash 终端窗口杀死它,奇怪的是它有一半的时间有效。

linux bash signals hotkeys
1个回答
0
投票

当您

trap
一个信号时,这不仅仅是在信号被处理之前添加额外的行为——它直接取代默认的信号处理程序。

因此,

trap 'send_signal 2' SIGINT

 阻止 ctrl+C 发挥其默认行为,而 
trap 'send_signal 3' SIGSTP
 阻止 ctrl+Z 发挥其默认行为。

© www.soinside.com 2019 - 2024. All rights reserved.