這似乎是一個愚蠢的問題,但我無法在任何地方找到答案。我知道在UNIX中,信號是異步處理的。如果我編寫處理信號的函數,那麼函數在哪裏運行?是否有新的線程產生?某個現有的線程以某種方式中斷?或者,這是在像異步I/O是系統線程處理?在Linux中如何處理異步信號?
7
A
回答
2
現有的進程線程被中斷,直到函數返回。對於確保它不會破壞線程處於中間位置的函數調用狀態,有一些嚴格的限制,特別是它調用的線程可能已經調用的任何函數都必須是異步可重入的。請參閱手冊頁,例如信號,進一步的細節sigaction或如果你喜歡問更具體的問題。
6
執行信號函數就好像進程中的線程已被中斷一樣。也就是說,使用信號線程調用信號處理程序,並重新安排堆棧,以便在信號處理程序返回線程時繼續執行。沒有新的線程被引入。
2
這不是一個單獨的線程,但您的代碼是匆忙暫停。這就是爲什麼只有有限的POSIX調用子集可用。
的常規處理程序必須非常小心,因爲其他地方處理某任意點被中斷。 POSIX具有「安全功能」的概念。如果信號中斷不安全的函數,並且處理程序調用不安全的函數,那麼行爲是不確定的。安全功能在各種標準中明確列出。
相關問題
- 1. 推遲在Linux中的信號處理
- 2. Erlang Linux信號處理
- 3. UNIX/Linux信號處理:SIGEV_THREAD
- 4. 處理同步信號
- 5. 如何在異步NSURLConnection中處理NSZombies?
- 6. 處理異步信號在多線程程序
- 7. 如何確定unix信號隊列中待處理的信號的數量(Linux)
- 8. 信號處理 - 異步函數和多線程應用程序,信號棧
- 9. Bash:異步處理信號(無後臺任務)
- 10. 如何處理ngOnChanges中的異步
- 11. Linux中的異常處理
- 12. 信號處理
- 13. C++中的異步處理
- 14. JSP中的異步處理
- 15. c - 無法在Linux中訂閱新的信號處理程序
- 16. 使用sigaction在Linux中的信號處理程序(C++)
- 17. Node.js處理異步
- 18. 異步處理ODP.NET
- 19. Java異步處理
- 20. 異步報警信號
- 21. 如何等待異步調用在單信號API中完成
- 22. 如何在linux中發信號線?
- 23. 如何處理異步循環?
- 24. 如何處理異步麪條代碼?
- 25. 如何處理多個異步請求?
- 26. 如何處理多個異步下載
- 27. Angular 2如何處理異步調用
- 28. 如何使用mysql處理nodejs異步?
- 29. 如何處理多個異步請求?
- 30. NameError在信號處理