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