终止由另一个bash函数调用的bash函数,而不终止调用方
我有一个bash函数终止由另一个bash函数调用的bash函数,而不终止调用方,bash,Bash,我有一个bash函数func_1,它调用func_2func_2在通过^C告知之前不会终止。如何终止func_2然后继续执行func_1?调用func_1,然后在func_2期间终止,将停止func_1。谢谢 假设func_2中的处理是通过外部程序完成的(参见下面示例中的sleep语句),您可以使用“trap”来捕获ctrl/C(实际上是SIGINT,根据@anishsane的上述注释) 请注意,外部进程的显式终止是通过将信号分派给该子进程来执行的 #! /bin/bash func_1()
func_1
,它调用func_2
func_2
在通过^C告知之前不会终止。如何终止func_2
然后继续执行func_1
?调用func_1
,然后在func_2
期间终止,将停止func_1
。谢谢 假设func_2中的处理是通过外部程序完成的(参见下面示例中的sleep语句),您可以使用“trap”来捕获ctrl/C(实际上是SIGINT,根据@anishsane的上述注释)
请注意,外部进程的显式终止是通过将信号分派给该子进程来执行的
#! /bin/bash
func_1() {
echo "In func_1"
sleep 100 &
# Save the PID of the external program
X=$!
trap 'kill -INT $X' INT
# Wait for the external program to finish/get killed.
wait
echo "resume func_1"
}
func_2() {
echo "In func_2"
func_1
echo "resume func_2"
}
func_2
如果您可以使用上述脚本,并输入“ctrl/C”,则输出将为:
In func_2
In func_1
^Cresume func_1
resume func_2
如果没有办法终止函数本身,那么您必须终止
func_2
从trap
或周围代码执行的任何操作。如果包含实际代码,则更容易看到实际工作情况。另外,在另一个不相关的注释中,^C
相当于SIGINT
(即kill-2
)SIGTERM
是kill-15
。bash函数与调用它们的脚本在同一进程中运行。像^C
(SIGINT
)这样的信号是在过程级传递的。因此,如果不终止父脚本,就无法终止当前函数。话虽如此,您可以TRAP
信号设置一些全局变量,并通过检测该变量提前退出func_2
。如果您发布func_2
的代码,将对我们有所帮助。