无法将信号SIGINT发送到脚本内创建的进程

时间:2014-04-05 03:55:18

标签: linux bash signals

我有两个脚本:

### firstScript.sh ###
trap 'kill $pid;' SIGINT
for ((i=1; i<=10; i++))
do
        echo "$i x $1 = `expr $i \* $1`"
        sleep 10 &
        pid=$!
        wait $!
done

### secondScript.sh ###
./firstScript.sh 5 &
pid=$!
echo $pid
ps
for (( i=0; i<8; i++))
do
        kill -2 $pid
        sleep 3
done

第二个脚本将在后台模式下调用第一个脚本,并每隔3秒向它发送一个SIGINT信号。但是,它根本不起作用。

我尝试使用./firstScript.sh 5 &在后​​台运行第一个脚本并发送一个kill -2 %1kill -2 <pid>的信号(在创建第一个脚本后已经通过了pid)并且它们都工作了细

但是,我不能通过剧本来做。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

如果您希望按照您想要的方式使其工作,请使用其他信号,例如SIGUSR1:

### firstScript.sh ###
trap 'kill $pid;' SIGUSR1
for ((i=1; i<=10; i++))
do
        echo "$i x $1 = `expr $i \* $1`"
        sleep 10 &
        pid=$!
        wait $!
done

### secondScript.sh ###
./firstScript.sh 5 &
pid=$!
echo $pid
ps
for (( i=0; i<8; i++))
do
        kill -USR1 $pid
        sleep 3
done

我花了一些时间试图找出为什么SIGINT的行为方式,但还未能实现。