gpt4 book ai didi

bash - 如何在不关闭 xterm 的情况下捕获 SIGINT?

转载 作者:行者123 更新时间:2023-11-29 09:05:26 25 4
gpt4 key购买 nike

这是我的脚本;

#!/bin/bash
trap '' SIGINT
xterm &
wait

我运行它并弹出一个 xterm。然后,我将键盘对准原始终端窗口并点击 ^C。我不希望发生任何事情,而是子 xterm 消失了。

(理想情况下,我想安装自己的陷阱处理程序,但这是一小步)

在 fork xterm 之后使用 disown 将 xterm 从父级分离,然后 ^C 不会对 xterm 做任何事情,但是 wait 不起作用。

我只想阻止 SIGINT 进入 xterm。

最佳答案

当您将 SIGINT 发送到 bash 脚本时,信号会传播到脚本中的当前进程,然后它会在陷阱中执行命令。所以“等待”被打断了。您必须再次“等待”运行。

此外,您还必须确保所有作业都在各自的进程组中启动 (set -m)。从设置手册页:

set -m

Monitor mode. Job control is enabled. This option is on by default for interactive shells on systems that support it (see JOB CONTROL above). Background processes run in a separate process group and a line containing their exit status is printed upon their completion.

#!/bin/bash
set -m
trap 'R=true' SIGINT
xterm &
while : ; do
R=false
wait
[[ $R == true ]] || break
done

您可以在 shebang 中看到它使用“-x”选项运行的命令。

关于bash - 如何在不关闭 xterm 的情况下捕获 SIGINT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964824/

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