Можно ли принудительно завершать соединения (закрыть ожидание)?

С точки зрения task_structпотоки процесса имеют одного и того же лидера группы потоков(group_leaderв task_struct), тогда как дочерние процессы имеют разных лидеров группы потоков (для каждого отдельного дочернего процесса ).

Эта информация предоставляется пользовательскому пространству через файловую систему /proc. Вы можете отследить родителей и детей, взглянув на поле ppidв /proc/${pid}/statили .../status(, это дает родительский pid ); вы можете отслеживать потоки, глядя на поле tgidв .../status(. Это дает идентификатор группы потоков, который также является pid лидера группы ). Потоки процесса становятся видимыми в каталоге /proc/${pid}/task:, каждый поток получает свой собственный подкаталог. (Каждый процесс имеет по крайней мере один поток.)

На практике программы, желающие отслеживать свои собственные потоки , будут полагаться на API-интерфейсы, предоставляемые библиотекой потоков, которые они используют, а не на информацию, специфичную для ОС -. Обычно в Unix -подобных системах это означает использование pthreads.

1
09.09.2019, 11:47
1 ответ

Невозможно закрыть сокет в состоянии CLOSE_WAIT(или любом другом состоянии )извне. Если некорректно работающая программа накапливает CLOSE_WAITсоединений, единственный способ освободить эти соединения — убить ее.

Это ошибка в приложении, лучшее решение — исправить ее. (Я не говорю, что это осуществимо или реалистично. )Кроме того, вы можете подключиться к нему с помощью отладчика и закрыть соединения из отладчика...

1
28.04.2021, 23:29

Теги

Похожие вопросы