sh脚本:trap "kill -- -$$" EXIT和exec的用法
linux环境下,在sh脚本中启动了一个javav程序,ctrl+c结束程序时,未能正常结束另一个程序。为了解决上述问题,可以在sh中添加trap "kill -- -$$" EXIT 或使用 exec 执行java程序。
-
trap "kill -- -$$" EXIT
:- 功能:该命令用于设置一个信号处理程序,当脚本退出时执行特定命令。在这种情况下,命令是
kill -- -$$
,它会向当前进程组发送一个SIGTERM信号,以杀死整个进程组。 - 共同点:
trap
命令用于捕获或处理信号,并定义在脚本退出时要执行的命令。 - 区别:与
exec
命令相比,trap
并不是替换当前进程,而只是在脚本退出时执行一段指定的命令。
- 功能:该命令用于设置一个信号处理程序,当脚本退出时执行特定命令。在这种情况下,命令是
-
exec
:- 功能:
exec
命令用于替换当前进程,将新的命令或程序作为当前进程来执行。它会关闭当前脚本的进程,并用新的进程来取代它。 - 共同点:与
trap
命令不同,exec
命令并不是用于处理信号,而是重新启动或切换到另一个命令或程序的执行上下文。 - 区别:
exec
命令用于替换当前进程,而trap
命令用于在脚本退出时执行特定命令。
- 功能:
一般使用场景如下:
trap "kill -- -$$" EXIT
:在脚本中使用该命令可以确保在脚本退出时,无论是正常退出还是异常终止,都能执行特定的清理操作。例如,关闭打开的文件、释放资源或发送通知等。exec
:常用于脚本内部的逻辑切换。通过使用exec
命令,脚本可以将控制权转移到其他命令或程序上,并在那里继续执行。这可以用于重启脚本本身或启动另一个脚本或程序等情况。