[英]Linux Virtual Timer Behavior on Clone Threads
我已經完成以下工作:
克隆的線程還會監聽SIGVTALRM嗎? 那么當SIGVTALRM觸發時,兩個線程都會調用信號處理程序嗎? 另外,在創建新線程之后,可以在不影響主線程信號處理程序的情況下將其SIGVTALRM的信號處理程序更改為另一個功能嗎?
我猜這取決於傳遞給clone()的標志。 主要是我正在使用CLONE_SIGHAND和SIGCHLD。 它也取決於其他標志嗎?
這完全取決於您是否為克隆syscall指定CLONE_THREAD
。 如果不這樣做,那么itimer不被孩子繼承(所以當計時器到期時它也不會發生)。 雖然它仍然會安裝一個信號處理程序。
如果您確實指定CLONE_THREAD
,則認為子級與父級屬於同一進程。 當計時器到期時,將向一個線程發出信號(並運行信號處理程序)-但未指定哪個線程。
如果您嘗試更改子級中的信號處理程序,將會發生什么情況取決於CLONE_SIGHAND
標志。 如果未設置,則子級可以愉快地調用sigaction
來更改信號處理程序,而不會影響父級; 但是如果設置了CLONE_SIGHAND
,則當子級調用sigaction
,整個處理過程的信號處理程序都會更改。 還要注意,如果指定CLONE_THREAD
,則還必須指定CLONE_SIGHAND
。
但是,子級可以使用sigprocmask
屏蔽SIGVTALRM
信號,而不會影響父級。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.