我在脚本中有
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
, 例如 相关SIGINT
,SIGHUP
否则正常终止不会触发它。至少在 Bash 中,人们可以使用
trap 'kill ${!}; term_handler' EXIT
当脚本因任何原因退出时运行陷阱。