我有以下两个脚本
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的第三行和第四行,但这并没有发生。可能是什么问题?请引导。
下面的答案起到了帮助作用。我还发布了一个链接,其中有一些与SIGINT相关的好细节,并很好地处理了它
当您点击Control+C(或任何配置为INTR
字符的字符)时,SIGINT
将发送到前台进程组中的所有进程。这包括示例中的父进程。您的父级未配置为捕获SIGINT
,因此它终止。
来源:POSIX.1-2008 XBD第11.1.9节