Что такое SIG_0 при взгляде на полосу

Присоединение strace к процессу, использующему большое количество процессоров, показывает, что pid "убивается" снова и снова.

Процесс использует 130% процессорного времени. Что такое 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. 

1 ответ

Решение

От man tgkill:

tgkill () отправляет сигнал sig потоку с идентификатором потока tid в группе потоков tgid. (Напротив, kill(2) может использоваться только для отправки сигнала процессу (то есть группе потоков) в целом, и сигнал будет доставлен в произвольный поток внутри этого процесса.)

Что только оставляет нам вопрос о том, что представляет сигнал 0. Ответ, ни один вообще:

Если у вас есть идентификатор процесса, но вы не уверены, что он действителен, вы можете использовать для проверки его наиболее вероятного кандидата: команду kill. Если вы не видите ссылки на это на справочной странице kill(1), проверьте информационные страницы. Страница man/info утверждает, что сигнал 0 является особым, и что код выхода из kill указывает, может ли сигнал быть отправлен указанному процессу (или процессам).

tgkill вызовы, таким образом, проверяют наличие различных потоков в любом процессе, через который вы отслеживаете strace, Возвращаемое значение 0 указывает, что протестированные потоки существуют; вопрос, на который нужно ответить сейчас: почему процесс зацикливается на тесте? (Я предполагаю, что это то, что он делает, во всяком случае; вероятно, если бы он когда-либо делал что-то еще, что вы видели, вы упомянули бы это в своем вопросе.)

Другие вопросы по тегам