gpt4 book ai didi

c - tid状态变化时获取信号

转载 作者:行者123 更新时间:2023-11-30 16:05:45 26 4
gpt4 key购买 nike

有一种方法可以使用 waitpid 来查看 pid/tid 状态何时发生变化,但这是阻塞函数。

我想监视特定 pid 中的所有线程,并在其中一个线程发生更改时获取信号并打印 tid。

现在,我打开线程作为该进程中的线程计数,并且每个 1 在 1 个 tid 上进行 waitpid ,并且在该阻塞函数完成后,我打印更改的 tid。

如何获得 tid 更改的信号,以便我可以监视 1 个线程中的所有 tid。

我不想监控系统中的所有 pid,只监控特定的 pid/tid。

这些 tid/pid 不是我的进程的子进程。

最佳答案

您可以调用

int status;
pid_t waitpid(-1, &status, 0);

等待任何子进程更改。因此,您不必提前指定要监视的 pid,并且可以对任何状态更改使用react。这样你就不需要为每个pid启动一个线程。

关于问题的信号部分:当子进程退出时,SIGCHLD 会发送到您的进程。默认情况下会忽略此信号,但当然您可以为其安装自定义信号处理程序。

如果你只想获取特定的pid,linux提供了选项WNOWAIT,它只报告状态,但并不真正获取子进程。现在您可以检查 pid 是否是您想要监视的 pid 之一,如果是,则再次调用 waitpid()(不带该选项)。

如果进程不是子进程,则通常不能使用waitpid()。一种选择是,如果其中一个进程退出,则将 ptrace() 附加到这 40 个进程以获取信号。然而,这可能会产生不需要的副作用。

关于c - tid状态变化时获取信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60203706/

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