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