【发布时间】:2016-01-20 17:25:42
【问题描述】:
我正在运行一个调用 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
【问题讨论】:
-
当你给父母发信号时
sh2在做什么? -
sh2 正在处理一些信息并将其写入文件
标签: bash shell signals sigterm