【问题标题】:KornShell Script - Parent Process not Completing when Child is Interrupted (TRAP INT)KornShell 脚本 - 子进程中断时父进程未完成 (TRAP INT)
【发布时间】:2013-06-25 19:03:51
【问题描述】:

我有以下 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 相关的一些详细信息

【问题讨论】:

    标签: shell unix scripting ksh aix


    【解决方案1】:

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

    来源:POSIX.1-2008 XBD section 11.1.9

    【讨论】:

    • 感谢@Richard Hansen。 . .这很有帮助。如果我在父级中为 INTR 添加一个陷阱,那么它会很好地捕捉到它。这是一个很大的帮助。另外,有没有办法覆盖这种行为?子进程单独处理信号而不传播给父进程?
    • @Guddu:最好在unix.stackexchange.com 的一个新问题中提出这个问题:-)
    • 谢谢理查德 我在unix.stackexchange.com/questions/80975/…创建了一个帖子
    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2013-12-17
    相关资源
    最近更新 更多