簡體   English   中英

Linux虛擬計時器在克隆線程上的行為

[英]Linux Virtual Timer Behavior on Clone Threads

我已經完成以下工作:

  1. 創建一個重復觸發的虛擬計時器。
  2. 為SIGVTALRM安裝信號處理程序
  3. 調用克隆系統調用
  4. 設置sched_affinity,以使克隆的線程在其他CPU上運行

克隆的線程還會監聽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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM