С точки зрения task_struct
потоки процесса имеют одного и того же лидера группы потоков(group_leader
в task_struct
), тогда как дочерние процессы имеют разных лидеров группы потоков (для каждого отдельного дочернего процесса ).
Эта информация предоставляется пользовательскому пространству через файловую систему /proc
. Вы можете отследить родителей и детей, взглянув на поле ppid
в /proc/${pid}/stat
или .../status
(, это дает родительский pid ); вы можете отслеживать потоки, глядя на поле tgid
в .../status
(. Это дает идентификатор группы потоков, который также является pid лидера группы ). Потоки процесса становятся видимыми в каталоге /proc/${pid}/task
:, каждый поток получает свой собственный подкаталог. (Каждый процесс имеет по крайней мере один поток.)
На практике программы, желающие отслеживать свои собственные потоки , будут полагаться на API-интерфейсы, предоставляемые библиотекой потоков, которые они используют, а не на информацию, специфичную для ОС -. Обычно в Unix -подобных системах это означает использование pthreads.
Невозможно закрыть сокет в состоянии CLOSE_WAIT
(или любом другом состоянии )извне. Если некорректно работающая программа накапливает CLOSE_WAIT
соединений, единственный способ освободить эти соединения — убить ее.
Это ошибка в приложении, лучшее решение — исправить ее. (Я не говорю, что это осуществимо или реалистично. )Кроме того, вы можете подключиться к нему с помощью отладчика и закрыть соединения из отладчика...