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

标签 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

以下是 session 记录

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 相关的一些详细信息。

最佳答案

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

来源:POSIX.1-2008 XBD section 11.1.9

关于shell - KornShell 脚本 - 当子进程中断时父进程未完成 (TRAP INT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357377/

相关文章:

regex - bash shell 删除大写文件名,即使模式是小写

java - Ganymed SSH - 更改用户

bash - 如何在bash中杀死后抑制终止消息?

shell - 并行执行多个子Shell脚本的错误处理

windows - MobaXterm 中的重命名选项卡用于 session 持续时间

python - 在共享的多平台 POSIX 环境中使用 C

elasticsearch - ElasticSearch嵌套查询按数组中的第二项过滤

linux - 如何在 unix 中只删除 > [大于] 和 < [小于] 之间的一个换行符

javascript - 如何从网站执行批处理文件

perl - 为什么我使用SQL从Perl获得奇怪的输出?