gpt4 book ai didi

bash - 如何通过一组脚本传播信号?

转载 作者:行者123 更新时间:2023-11-29 08:44:43 25 4
gpt4 key购买 nike

我有一组脚本,由一个主脚本控制。我想在主脚本中捕获信号 ctrl+c 并将其传播给其他人。其他脚本也应该捕获这个信号(来自主脚本)并做一些清理......

我已经尝试发送 kill -s SIGINT 给 children ,但他们似乎无法捕捉到信号(即使定义了 trap 'Cleanup' SIGINT在 child 脚本上)

任何线索如何实现这一点?

最佳答案

以下示例演示了一个父脚本在启动两个执行自己的操作(也 sleep 5)的子脚本之后执行某些操作(sleep 5)。当 parent 退出(无论出于何种原因)时,它会向 child 发出终止信号(不要SIGINT,终止由SIGTERM发出信号,也是默认的kill信号)。然后 children 在接收到 SIGTERM 时做他们的事情。如果 children 是他们自己的脚本,我建议您将 TERM 上的陷阱更改为 EXIT 上的陷阱,以便 children 清理,无论他们终止的原因是什么是(只要它是可捕获的)。

请注意我使用了 wait。 Bash 在收到信号时不会中断正在运行的非内置命令。相反,它等待它们完成并在命令完成后处理信号。如果您使用 wait,bash 会立即停止等待并立即处理信号。

#!/usr/bin/env bash

trap 'echo parent shutting down; kill $(jobs -p)' EXIT

{ trap 'echo child 1 signaled' TERM; sleep 5 & wait; } &
{ trap 'echo child 2 signaled' TERM; sleep 5 & wait; } &

sleep 5

关于bash - 如何通过一组脚本传播信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com