2011-05-13 3 views
0

나는 계속해서 특정 유스 케이스를 테스트하기 위해 루프에서 'kill -9'를 시작하는 데몬을 가지고있다. 이 데몬은 fd를 여는 공유 라이브러리를로드합니다. (fd의 개폐는 커널에서 처리되는 다른 공유 라이브러리 코드에 있습니다). 나는 커널 라이브러리에서 작업을 정리할 때 정리하기 전에 task_structs (tgid)에서 PID 값을 확인합니다. 내 관찰 : 언젠가 데몬이 죽을 때 관련 바인드 프로세스 ID 값을 보지 않고 관련 tgid 값을 볼 수 없다는 것을 언젠가 볼 수 있습니다. 결과적으로 커널 코드의 정리 작업이 'kill -9'에 의해 죽은 프로세스 ID에 적용되지 않습니다.Android : tgid task_struct val

현재 -> tgid 값이 바인더 프로세스의 값인 이유는 누구나 알고 있습니다. 살해당하는 대몬이 아니라. 내 데몬은 'libbinder'에 링크되어 있습니다. 그것이 차이를 만들 수 있는지 확실하지 않습니다. 'libbinder'와 관련 코드를 내 데몬에서 제거하면 모든 것이 잘된 것 같습니다.

어떤 제안이나 아이디어라도주십시오.

답변

0

사용자 공간 프로세스가 파일을 열고 다른 프로세스를 포크하면 열린 파일이 분기 된 프로세스에서 복제됩니다 (libbinder이 다른 프로세스를 포크로 찍는 것으로 보입니다).

커널에있는 file_operations 구조체의 close 메서드는 마지막 파일에 대한 참조가 삽입 된 경우에만 호출됩니다. 두 프로세스가 같은 시간에 죽으면 close 메소드를 호출하는 프로세스는 둘 중 하나가 죽는 것 중 하나가됩니다.

커널 코드는 이 아니고tgid이어야합니다. 정리 작업에 필요한 데이터를 struct file, 이 아닌이 아닌 task_struct에 첨부해야합니다.

+0

이 정보는 분명 도움이되었습니다. 답변 해주셔서 감사합니다 – Siddartha

관련 문제