一个线程中的崩溃如何影响其他线程。
How crash in one thread affects other threads.
我有一个有 2 个线程的程序。
- 线程 1:在 IOCTL 调用中(与驱动程序交互)
- 线程 2:在 SIGSEGV 出现的地方做其他事情。
在这种情况下,Thread1 是完成了 ioctl 调用的执行还是在执行内核代码之间停止了线程?
如果可能,请在 Windows、linux 和 android 上下文中提供答案(其中 debuggerd 附加到使用 ptrace 创建逻辑删除的进程)。
Linux 的回答:我假设该进程将作为线程 2 处理 SIGSEGV 的一部分终止。在 Linux 中,线程在内核模式下通常无法终止,尽管系统调用代码可能(例如,如果它处于所谓的可中断等待中)注意到进程终止并提前退出。线程 1 将在 returns.
后终止
从开发的角度来看,我不熟悉 Android,但我的理解是,进程会为许多信号设置一个处理程序,这些信号会唤醒 debuggerd 守护进程,而 debuggerd 守护进程又附加到处理使用 ptrace 发出信号并转储各种进程状态位。我希望这能够在系统调用的线程 1 returns 之前发生。
我有一个有 2 个线程的程序。
- 线程 1:在 IOCTL 调用中(与驱动程序交互)
- 线程 2:在 SIGSEGV 出现的地方做其他事情。
在这种情况下,Thread1 是完成了 ioctl 调用的执行还是在执行内核代码之间停止了线程?
如果可能,请在 Windows、linux 和 android 上下文中提供答案(其中 debuggerd 附加到使用 ptrace 创建逻辑删除的进程)。
Linux 的回答:我假设该进程将作为线程 2 处理 SIGSEGV 的一部分终止。在 Linux 中,线程在内核模式下通常无法终止,尽管系统调用代码可能(例如,如果它处于所谓的可中断等待中)注意到进程终止并提前退出。线程 1 将在 returns.
后终止从开发的角度来看,我不熟悉 Android,但我的理解是,进程会为许多信号设置一个处理程序,这些信号会唤醒 debuggerd 守护进程,而 debuggerd 守护进程又附加到处理使用 ptrace 发出信号并转储各种进程状态位。我希望这能够在系统调用的线程 1 returns 之前发生。