1

我对使用信号和处理程序非常陌生。我的任务是创建一个调度程序。当我制作的一些基本程序首次运行时,它会向调度程序发送一个信号,以便将其添加到调度程序的队列中。然后程序自行停止,从现在开始只有调度程序可以启动/停止它。我将 sigqueue 与 SIGRTMIN 一起使用,因为有人告诉我这些允许信号排队。这很重要,因为调度程序必须根据程序请求添加到调度程序列表的顺序为程序分配时间片。我认为我的程序运行良好,除非我同时创建 2 个以上的基本类型程序。我猜测同时向调度程序发送了太多信号,这会导致奇怪的问题(即使信号应该排队......

这是我的调度程序中的一些代码。

//setting up sigaction
struct sigaction sigact;
sigemptyset(&sigact.sa_mask);
sigaddset(&sigact.sa_mask, SIGRTMIN);
sigact.sa_flags = SA_SIGINFO;
sigact.sa_sigaction = sigHandler;
sigaction(SIGRTMIN, &sigact, NULL);

//the actual signal handler function
void sigHandler(int sigNum, siginfo_t *info, void *unused)
{
    if (sigNum == SIGRTMIN)
    {
        pid_t nextWorker = info->si_pid;
        insert_pid(&pid_q, nextWorker);
        fprintf(stdout, "PID: %d added to queue.\n", nextWorker);
        fflush(stdout);
    }
}

请帮我看看发生了什么!:)

4

0 回答 0