首页 文章

使用kill发送信号的任务是否会被抢占?

提问于
浏览
0

我们在VxWorks中有以下代码:

sig_hdr () { ... }
task_low_priority() {
    ...
    // Install signal handler for SIGUSR1
    signal(SIGUSR1, sig_hdr);
    ...
}
task_high_priority() {
    ...
    kill(pid, SIGUSR1); //pid is the ID of task_low_priority
    ...
}

高优先级任务向低优先级任务发送信号(通过kill) . 高优先级任务是否会被抢占,低优先级任务是否会立即执行,或者信号是否会推迟到低优先级任务运行?

1 回答

  • 1

    发送信号不是阻塞操作 . 信号处理程序仅在注册的任务具有处理器时执行 .

    在这种特殊情况下,信号处理将推迟到低优先级任务执行 .

    这意味着如果处理程序的任务没有运行,信号处理可能无限期地延迟 .

    这对内核操作有效 . 在实时进程中,信号处理有点不同,因为RTP中的 first available 任务将执行信号处理程序 .

相关问题