当我尝试通过 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 终端窗口杀死它,奇怪的是它有一半的时间有效。
当您
trap
一个信号时,这不仅仅是在信号被处理之前添加额外的行为——它直接取代默认的信号处理程序。
因此, trap 'send_signal 2' SIGINT
阻止 ctrl+C 发挥其默认行为,而
trap 'send_signal 3' SIGSTP
阻止 ctrl+Z 发挥其默认行为。