gpt4 book ai didi

windows - Windows Hook 的 Linux 等价物

转载 作者:可可西里 更新时间:2023-11-01 10:28:07 25 4
gpt4 key购买 nike

我想知道如何表达像 windows hook 这样的东西在 Linux 中。

我有一个带有各种线程的 Linux 应用程序。主线程当前为 ctrlc 安装了一个信号处理程序,捕获它并关闭应用程序。

我希望应用程序中的另一个线程首先处理 ctrlc 事件,然后传递给主线程。

最佳答案

据我所知,这很难做到。 Unix 信号是原始的。

默认情况下,信号会传送到随机线程。为了解决这个问题,通常采用的技巧是在除一个线程之外的所有线程中阻塞信号。最简单的方法是用 pthread_sigmask 阻塞 main 中的所有信号,然后创建线程(它将继承信号掩码),然后有一个单独的线程执行 sigwait/sigwaitinfo 关于被阻止的信号。这会强制将信号传送到该线程。

在信号捕获线程中使用信号后,您需要使用 main 的线程 ID 和捕获的信号编号执行 pthread_kill 以将信号转发给 main。问题是 main 会阻止它。

在转发信号之前,您无法真正解除阻塞 main 并阻塞信号捕获线程,因为这是一种竞争条件 - 没有什么可以阻止第二个信号进入并且信号捕获线程看不到它。这会打败所有的努力。

您可以让信号线程通过某种其他形式的 IPC(管道或其他)向 main 发送一条消息,说“捕获 XX,采取适当的行动”。也许这就足够了?

也许有人有一些聪明的主意,但我怀疑最重要的是这不是 unix 中通常的做法。

关于windows - Windows Hook 的 Linux 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961624/

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