我正在运行一个调用 shell 脚本的程序(用于讨论 pid 100 的 sh1)。该脚本依次调用另一个脚本(用于讨论 pid 101 的 sh2)并等待它完成。sh2(子脚本)大约需要 50 秒才能完成。
我调用 sh2 (/bin/sh2.sh) 的方式
在等待孩子完成期间,我尝试终止 sh1(使用 kill -15 100)。我在 sh1 中有一个处理函数来处理这个信号。但是,我观察到我的 sh1(父脚本)直到孩子完成它的工作(50 秒)才被终止,并且只有在此信号被处理之后。
我修改了我的子脚本,需要 30 秒才能完成,我观察到在向 sh1 发出 SIGTERM 后,大约需要 30 秒才能终止。
这是处理 SIGTERM 时的行为吗?那就是继续被子进程阻止?然后才处理信号。该过程不会因信号处理而中断吗?
父脚本中的信号处理。
function clean_up()
{
//Do the cleanup
}
trap "clean_up $$; exit 0" TERM