2

我有以下 2 个脚本

父.sh

#!/usr/bin/ksh
echo "In Parent : Before"
Child.sh
echo "In Parent : After"
read

孩子.sh

#!/usr/bin/ksh
function quit_handler
{
        echo "Quit on Child"
        stty $origtermconfig
        exit
}
origtermconfig="$(stty -g)"
trap quit_handler INT
while true
do
        echo "Child Says Hi"
        echo "Child PID is" $PID
        echo "Parent PID is " $PPID
        sleep 2
done

以下是会话记录

u0012734@l273pp039_pub[/home/u0012734] > Parent.sh
In Parent : Before
Child Says Hi
Child PID is 16618
Parent PID is  18640
Child Says Hi
Child PID is 16618
Parent PID is  18640
Child Says Hi
Child PID is 16618
Parent PID is  18640    <----- I pressed CTRL-C Here
Quit on Child
u0012734@l273pp039_pub[/home/u0012734] >

我期待父脚本继续执行 Parent.sh 的第三和第四行,但这并没有发生。可能是什么问题?请指导。


以下答案有所帮助。我还发布了一个链接,其中包含一些与SIGINT 相关的详细信息并处理得很好

4

1 回答 1

2

当您点击Control+ C(或任何配置为该字符的INTR字符)时,SIGINT将发送到前台进程组中的所有进程。这包括您示例中的父进程。您的父母未配置为诱捕,SIGINT因此它终止。

来源: POSIX.1-2008 XBD 第 11.1.9 节

于 2013-06-28T05:07:25.437 回答