克隆线程上的Linux虚拟计时器行为

克隆线程上的Linux虚拟计时器行为,linux,timer,system-calls,Linux,Timer,System Calls,我已经做了以下工作: 创建一个重复触发的虚拟计时器 为SIGVTALRM安装信号处理程序 调用克隆系统调用 设置sched_affinity,以便克隆的线程在不同的CPU上运行 克隆的线程也会监听SIGVTALRM吗?那么,当触发SIGVTALRM时,这两个线程会调用信号处理程序吗?另外,在创建新线程之后,我是否可以将其SIGVTALRM的signalhandler更改为另一个函数,而不影响主线程signalhandler 我猜这取决于传递给clone()的标志。主要是,我用的是CLONE_SI

我已经做了以下工作:

  • 创建一个重复触发的虚拟计时器
  • 为SIGVTALRM安装信号处理程序
  • 调用克隆系统调用
  • 设置sched_affinity,以便克隆的线程在不同的CPU上运行
  • 克隆的线程也会监听SIGVTALRM吗?那么,当触发SIGVTALRM时,这两个线程会调用信号处理程序吗?另外,在创建新线程之后,我是否可以将其SIGVTALRM的signalhandler更改为另一个函数,而不影响主线程signalhandler


    我猜这取决于传递给clone()的标志。主要是,我用的是CLONE_SIGHAND和SIGCHLD。它也依赖于其他标志吗?

    它完全取决于是否为克隆系统调用指定
    CLONE\u THREAD
    。如果不执行操作,则子项不会继承itimer(因此计时器过期时不会发出信号)。不过,它仍将安装一个信号处理程序

    如果指定
    克隆线程
    ,则认为子进程与父进程属于同一进程。当计时器过期时,其中一个线程将收到信号(并运行信号处理程序),但没有指定是哪个线程

    如果您尝试更改子系统中的信号处理程序时取决于
    CLONE\u和
    标志,会发生什么情况。如果未设置,则孩子可以愉快地调用
    sigaction
    来更改信号处理程序,而不会影响家长;但是,如果设置了
    CLONE\u signand
    ,则当子进程调用
    sigaction
    时,整个进程的信号处理程序都会更改。还要注意,如果指定
    CLONE\u-THREAD
    ,则还必须指定
    CLONE\u-THREAD和


    但是,子级可以使用
    sigprocmask
    屏蔽
    SIGVTALRM
    信号,而不会影响父级。

    这完全取决于是否为克隆系统调用指定
    CLONE\u THREAD
    。如果不执行
    操作,则子项不会继承itimer(因此计时器过期时不会发出信号)。不过,它仍将安装一个信号处理程序

    如果指定
    克隆线程
    ,则认为子进程与父进程属于同一进程。当计时器过期时,其中一个线程将收到信号(并运行信号处理程序),但没有指定是哪个线程

    如果您尝试更改子系统中的信号处理程序时取决于
    CLONE\u和
    标志,会发生什么情况。如果未设置,则孩子可以愉快地调用
    sigaction
    来更改信号处理程序,而不会影响家长;但是,如果设置了
    CLONE\u signand
    ,则当子进程调用
    sigaction
    时,整个进程的信号处理程序都会更改。还要注意,如果指定
    CLONE\u-THREAD
    ,则还必须指定
    CLONE\u-THREAD和


    但是,子级可以使用
    sigprocmask
    屏蔽
    SIGVTALRM
    信号,而不影响父级。

    它还取决于
    CLONE\u THREAD
    标志。它还取决于
    CLONE\u THREAD
    标志。