KornShell脚本 - 子进程中断时父进程未完成(TRAP INT)

时间:2013-06-28 04:49:02

标签: shell unix scripting ksh aix

我有以下2个脚本

Parent.sh

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

Child.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的第三行和第四行但是没有发生。可能是什么问题?请指导。


以下答案有帮助。我还发布了一个链接,其中包含与SIGINTs and handling it well

相关的一些详细信息

1 个答案:

答案 0 :(得分:2)

当您点击 Control + C (或任何字符配置为INTR个字符)时,SIGINT会被发送到前台进程组中的所有进程。这包括示例中的父进程。您的父级未配置为SIGINT陷阱,因此终止。

来源:POSIX.1-2008 XBD section 11.1.9