gpt4 book ai didi

Controller 和 worker - 启动/停止信号

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:53 25 4
gpt4 key购买 nike

我有多个从父进程派生出来的工作进程,需要同时通知他们运行/停止;

家长:

while(1)
{
workers_start!
usleep(work_time);
workers_stop!
usleep(sleep_time);
}

我应该用什么来快速(!)通知他们?信号量(计数 N)、互斥锁、信号(在 execve fork 程序之后)?我听说信号量/互斥量很慢。我不确定信号,但我不知道发送这么多信号是否是个好主意(N 个工作人员 * 1 或 2 个信号/每 0.2 秒,其中 N 是 cpu 内核)。

抱歉,这是关于 Linux 的。

最佳答案

您可能希望将所有已处理的工作人员分配给一个进程组。您可以通过调用

setpgid(pid_t pid, pid_t pgid)

其中“pid 是每个 worker 的”fork()“调用的返回值,pgid 是所有 worker 的项目组 ID,所有 worker 都应该相同。手册页在这里:

http://man7.org/linux/man-pages/man2/getpgrp.2.html

然后您可以通过一次调用向所有进程发送信号

killpg(int pgrp, int sig)

其中 pgrp 是您在上述步骤中分配给所有工作人员的组。至于 killpg 调用中“sig”的值,如果您有 POSIX 平台,您可能希望使用用户定义的信号,例如 SIGUSR1、SIGUSR2 分别用于发出信号开始和停止。如果没有,您可以使用标准信号并捕获它们(覆盖它们的行为)。 killpg 的手册页在这里:

http://man7.org/linux/man-pages/man2/killpg.2.html

我希望这足够清楚并且与您正在寻找的相似。

关于 Controller 和 worker - 启动/停止信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969084/

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