这似乎是一个愚蠢的问题,但我无法在任何地方找到答案。我知道在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异步处理