Tengo un programa en Linux que es multiproceso. Hay ciertas áreas de memoria en las que estoy interesado para ver si se han escrito dentro de un cierto período de tiempo. Para eso solo doy acceso de lectura a esas páginas de memoria e instalo un manejador de señal para SIGSEGV. Ahora mi pregunta es, ¿cada hilo llamará al manejador de señal por sí mismo? Say Thread 1 escribe en algún área de memoria prohibida, ¿será el que ejecutará el manejador de señal?es SIGSEGV entregado a cada hilo?
Respuesta
En primer lugar los
disposiciones de señal son de todo el proceso; todos los hilos en un proceso comparten la misma disposición para cada señal. Si un hilo usa sigaction() a establezca un controlador para, digamos, SIGINT, , luego ese manejador se puede invocar desde entregado cualquier hilo al que se entregue el SIGINT .
Pero leer en
Una señal puede dirigirse a cualquiera de los dos el proceso como un todo o a una hilo específico. Una señal es thread-dirigida si
se genera como resultado directo de la ejecución de una instrucción específica hardware dentro del contexto de la rosca (
SIGBUS, SIGFPE, SIGILL, and SIGSEGV
)
cito de TLPI
.
No, por el título de la pregunta.
Al cuerpo de la pregunta: Para la señal particular que está solicitando, sí (de lo contrario: depende). El hilo que causa un segfault recibirá la señal.
Ver signal(7):
A signal may be generated (and thus pending) for a process as a whole (e.g.,
when sent using kill(2)) or for a specific thread (e.g., certain signals, such
as SIGSEGV and SIGFPE, generated as a consequence of executing a specific
machine-language instruction are thread directed [...].
¿Por qué dices que no, cuando en la descripción está escrito que SIGSEGV está dirigido a hilos? – MetallicPriest
Porque la pregunta es sobre "cada _ hilo". 'SIGSEGV' se entrega a _one_ thread (el que lo causó). Por lo tanto, no. (Pero, por supuesto, si no se maneja, puede (por lo general) matará todo el proceso, lo que obviamente afectaría a cualquier otro hilo, pero la señal no se entrega a cada uno). – Damon
La pregunta en el título no coincide bastante con la pregunta en el cuerpo; están pidiendo la misma información subyacente, pero un "no" a uno es un "sí" a la otra. Por lo que es posible que desee ajustar su respuesta para aclarar a cuál le está respondiendo que "no". – ruakh
- 1. EXC_BAD_ACCESS (SIGSEGV)
- 2. SIGSEGV al ingresar a una función
- 3. asignar a cada hilo un núcleo de la CPU
- 4. ¿IIS le da a cada usuario conectado un hilo?
- 5. ¿Tengo que pthread_incluir cada hilo que creo?
- 6. ¿Cuál es SIGSEGV, error de segmentación en Qt
- 7. sigsegv crash en iphone de crittercism
- 8. Iniciando un hilo para cada bucle interno en OpenMP
- 9. Does boost :: asio :: deadline_timer utiliza un hilo para cada temporizador?
- 10. ¿Cómo confirmar que el correo ha sido entregado o no?
- 11. Hace camello crear un hilo para cada ruta
- 12. ¿Es seguro llamar a CFRunLoopStop desde otro hilo?
- 13. ¿Por qué necesitamos usar NSAutoreleasepool para cada hilo?
- 14. SIGSEGV en la versión optimizada del código
- 15. Como llegar fullstacktrace usando _Unwind_Backtrace en SIGSEGV
- 16. FFMpeg Android Stagefright error SIGSEGV (decodificación h264)
- 17. señal de choque 11 SIGSEGV Android
- 18. ¿Es seguro el hilo cerrado?
- 19. ¿Cada 'HttpRequest' obtiene su propio hilo en ASP.NET?
- 20. ¿Qué es un hilo Kernel?
- 21. Programa recibió SIGSEGV señal, Fallo de segmentación
- 22. SIGSEGV Crash en iOS Dispositivo TestFlight
- 23. SIGSEGV cargando HTML + Flash en un WebView
- 24. Cómo resolver KERN_INVALID_ADDRESS en EXC_BAD_ACCESS (SIGSEGV)
- 25. ¿Qué es "hilo en línea"?
- 26. ¿Es seguro el hilo unique_ptr?
- 27. Compruebe si el hilo actual es el hilo principal
- 28. iPhone: ¿Cómo determinar si el hilo es el hilo principal?
- 29. ¿Es seguro utilizar este hilo de Parallel.ForEach()?
- 30. pasando parámetros a un hilo
Eso significa que el gestor de señal SIGSEGV será ejecutado por el hilo que ha escrito en la memoria prohibida, ¿verdad? – MetallicPriest
@MetallicPriest Sí, pero es el mismo controlador para todos los hilos. – cnicutar
¿Depende también de qué hilo se llame mprotect? Creo que mprotect es para todo el proceso, ¿verdad? – MetallicPriest