Bash SIGUSR1 循环脚本

Bash SIGUSR1 loop script

我在 3-4 天前开始学习 bash,我有一项任务要完成,但我很难完成。我需要制作一个脚本,运行 一个循环,在收到 SIGUSR1 信号后,它应该打印进程 ID 并退出。如果能得到一些帮助,我将不胜感激。

您可以添加一个trap命令来在收到信号时执行命令:

trap 'echo "Hmm, SIGUSR1??!"' SIGUSR1

为了让代码更简洁,让我们用一个函数来做到这一点:

exit_program(){
    echo "Here is the PID: $$"
    exit
}

如何调用trap中的函数?

trap "exit_program" SIGUSR1

希望这会有所帮助:

#!/usr/bin/env bash

# Cancel Program
exit_program(){
    echo "Here is the PID: $$"
    exit
}

# Reciever
trap "exit_program" SIGUSR1

你会这样做:

#!/usr/bin/env bash

# Our USR1 signal handler
usr1_trap(){
    printf 'Here is the PID: %d\nExiting right-now!\n' $$
    exit
}

# Register USR1 signal handler
trap usr1_trap USR1

printf 'Run this to stop me:\nkill -USR1 %d\n' $$

# Wait in background, not consuming CPU
while :; do
   sleep 9223372036854775807 & # int max (2^63 - 1)
   wait $!
done