2

У меня есть программа с 2 потоками.Как авария в одном потоке влияет на другие потоки.

  • Резьба1: В IOCTL вызова (взаимодействующий с водителем)
  • Резьба2: Делать другие вещи, где пришли SIGSEGV.

В этом случае Thread1 завершает выполнение вызова ioctl или поток останавливается между выполнением кода ядра?

Если возможно, предоставьте ответ в контексте Windows, linux и android (где debuggerd подключается к процессу с использованием ptrace для создания надгробных камней).

+0

Просьба подробно описать шаги, которые вы предприняли, чтобы исследовать это самостоятельно. –

ответ

1

Ответа на этот вопрос Linux для Linux: Я предполагаю, что процесс завершится как часть обработки потока 2 SIGSEGV. В Linux поток не может нормально завершаться как таковой, пока он находится в режиме ядра, хотя код системного вызова может (например, если он находится в так называемом прерывистом ожидании) уведомляет о завершении процесса и выходе из него раньше. Поток 1 прекратится, как только он вернется.

Я не знаком с Android с точки зрения развития, но я понимаю, что процессы настраивают обработчик для ряда сигналов, которые пробуждают демона debuggerd, который, в свою очередь, присоединяется к процессу обработки сигнала с помощью ptrace и отвалов различные биты состояния процесса. Я ожидаю, что это произойдет, прежде чем поток 1 вернется из системного вызова.

+0

Спасибо, что нашли время ответить на этот вопрос. Можете ли вы указать любую цитату для _ «нить не может нормально завершаться как таковая, пока она находится в режиме ядра» _ –

+0

Если исполняемый код ядра явно закрывает поток (например, системный вызов _exit) или другой поток ядра, то тогда Конечно, поток может завершиться в режиме ядра. В противном случае: у меня нет хорошей ссылки для предоставления, но посмотрите на kernel/exit.c и kernel/thread.c, в частности do_group_exit(), который «вызывается фатальными сигналами». Это посылает сигнал уничтожения всем потокам в группе, и сигналы обрабатываются в пользовательском режиме (например, после завершения системного вызова), а не в режиме ядра. Прорываются потоки в прерывистых снах. – michaeljt

 Смежные вопросы

  • Нет связанных вопросов^_^