${!} 返回什么?

${!} 返回什么?

我在脚本中有

trap 'kill ${!}; term_handler' SIGTERM

因此,当我们杀死 pid ${!} 时,SIGTERM 就会被执行。

答案1

或者更好的是${!},应该$!返回process ID (PID)最后执行的命令。

!- 扩展到最近执行的后台(异步)命令的进程 ID,因此$!将包含process ID (PID)最后一个后台作业的进程 ID。

应该注意的是,这代表在后台启动的程序。如果没有启动后台进程,则不会设置该参数。

答案2

$!${!}返回后台最后运行的进程的进程ID。

例如:wait $! 将等待最后一个进程完成后再继续

答案3

trap 'kill ${!}; term_handler' SIGTERM

kill ${!}; term_handler这表示当 shell 收到信号 SIGTERM 时运行 shell 命令。是${!}特殊参数$!, 哪个

($!) 扩展为最近放入后台的作业的进程 ID,无论是作为异步命令执行还是使用 bg 内置命令

如果脚本收到 SIGTERM,然后运行term_handler(可能是某个函数),那么这将具有杀死脚本启动的最后一个(可能是唯一的)后台进程的效果。如果没有陷阱,后台进程可能会在主脚本结束后继续运行。

尽管那里的陷阱专门与SIGTERM, 例如 相关SIGINTSIGHUP否则正常终止不会触发它。至少在 Bash 中,人们可以使用

trap 'kill ${!}; term_handler' EXIT

当脚本因任何原因退出时运行陷阱。

相关内容