strace를 볼 때 SIG_0은 무엇인가?


1

많은 cpu를 사용하는 프로세스에 strace를 연결하면 pid가 계속해서 '죽임을 당'합니다.

이 프로세스는 130 % cpu를 사용하고 있습니다. tgkill (SIG_0)이란 무엇입니까?

strace -p 3876 

nanosleep({0, 100000}, NULL) = 0 
tgkill(3876, 3884, SIG_0) = 0 
tgkill(3876, 3885, SIG_0) = 0 ...repeats over and over. 

답변:


3

에서 man tgkill:

tgkill ()은 시그널 sig를 쓰레드 그룹 tgid의 쓰레드 ID tid를 갖는 쓰레드에게 보낸다. 반대로, kill (2)는 전체 프로세스 (즉 스레드 그룹)에 신호를 보내는 데만 사용할 수 있으며 신호는 해당 프로세스 내의 임의의 스레드로 전달됩니다.

그냥 0 신호가 무엇인지에 대한 질문을 남겨 둡니다. 대답은 전혀 없습니다. :

프로세스 ID가 있지만 유효한지 여부가 확실하지 않은 경우 가장 가능성있는 후보 (kill 명령)를 테스트 할 수 있습니다. kill (1) 매뉴얼 페이지에서 이에 대한 참조가 보이지 않으면 정보 페이지를 확인하십시오. man / info 페이지는 시그널 0이 특별하고 kill의 종료 코드가 시그널이 지정된 프로세스 (또는 프로세스)로 전송 될 수 있는지 여부를 알려줍니다.

그만큼 tgkill 호출을 통해 모니터링하는 프로세스 내에서 다양한 스레드의 존재 여부를 테스트합니다. strace. 반환 값 0은 테스트 된 스레드가 존재 함을 나타냅니다. 지금 대답 할 질문은 프로세스가 테스트를 반복하는 이유는 무엇입니까? (나는 그것이 그것이 무엇을하고 있다고 가정합니다. 아마 당신이 보았던 다른 것을했을 경우 아마도 당신이 질문했을 것입니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.