Android: tgid task_struct val - PullRequest
       6

Android: tgid task_struct val

0 голосов
/ 13 мая 2011

У меня есть демон, который я постоянно запускаю и выполняю команду «kill -9» в цикле, чтобы провести стресс-тестирование конкретного варианта использования. Этот демон загружает общую библиотеку, которая, в свою очередь, открывает fd. (открытие / закрытие fd находится в другом коде общей библиотеки, обработанном в ядре). Я заметил, что во время операций очистки в библиотеке ядра он проверяет значение PID из task_structs, (tgid) перед очисткой. Теперь мое наблюдение: я иногда вижу, что когда демон убит, я не вижу соответствующего значения tgid, вместо этого я вижу странное значение идентификатора процесса, который из 'процесса связывания'. В результате мои операции очистки в коде ядра не вступают в силу для того идентификатора процесса, который был уничтожен командой 'kill -9'

Любой знает, почему значение current-> tgid является значением процесса связывания, а не демона, который был убит. Обратите внимание, что мой демон ссылается на libbinder. Не уверен, что это может иметь значение. Если я удалю ссылку на 'libbinder' и соответствующий код из моего демона, все будет нормально

Любые предложения / идеи, пожалуйста?

1 Ответ

0 голосов
/ 17 мая 2011

Если ваш пользовательский процесс открывает файл, а затем разветвляет другой процесс, открытый файл будет дублирован в разветвленном процессе (кажется вероятным, что этот libbinder разветвляется на другой процесс).

Закрытиеметод структуры file_operations в ядре будет вызываться только при добавлении ссылки last на файл.Если оба процесса умирают примерно в одно и то же время, то процесс, который в итоге вызывает метод close, будет зависеть от того, какой из них умрет вторым.

Ваш код ядра должен не указывать на tgid.Следует прикрепить данные, необходимые для операций очистки, к struct file, , а не к task_struct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...