返回顶部

sh脚本:trap "kill -- -$$" EXIT和exec的用法

linux环境下,在sh脚本中启动了一个javav程序,ctrl+c结束程序时,未能正常结束另一个程序。为了解决上述问题,可以在sh中添加trap "kill -- -$$" EXIT   或使用 exec 执行java程序。

  1. trap "kill -- -$$" EXIT

    • 功能:该命令用于设置一个信号处理程序,当脚本退出时执行特定命令。在这种情况下,命令是kill -- -$$,它会向当前进程组发送一个SIGTERM信号,以杀死整个进程组。
    • 共同点:trap命令用于捕获或处理信号,并定义在脚本退出时要执行的命令。
    • 区别:与exec命令相比,trap并不是替换当前进程,而只是在脚本退出时执行一段指定的命令。
  2. exec

    • 功能:exec命令用于替换当前进程,将新的命令或程序作为当前进程来执行。它会关闭当前脚本的进程,并用新的进程来取代它。
    • 共同点:与trap命令不同,exec命令并不是用于处理信号,而是重新启动或切换到另一个命令或程序的执行上下文。
    • 区别:exec命令用于替换当前进程,而trap命令用于在脚本退出时执行特定命令。

一般使用场景如下:

  • trap "kill -- -$$" EXIT:在脚本中使用该命令可以确保在脚本退出时,无论是正常退出还是异常终止,都能执行特定的清理操作。例如,关闭打开的文件、释放资源或发送通知等。
  • exec:常用于脚本内部的逻辑切换。通过使用exec命令,脚本可以将控制权转移到其他命令或程序上,并在那里继续执行。这可以用于重启脚本本身或启动另一个脚本或程序等情况。
 
 
 
posted @ 2023-07-12 20:16  雨山木风  阅读(191)  评论(1编辑  收藏  举报