Список списка подключения TCP от / proc

Вы можете использовать:

#dnf group remove "KDE Plasma Workspaces"

Также вы можете предоставить список своих групп:

#dnf grouplist hidden |grep -i kde
#dnf grouplist hidden |grep -i gnome

Затем выберите один из них в качестве аргумента группы удалить

3
22.02.2019, 15:24
2 ответа

В вашем подходе много недоразумений. Я пройдусь по ним один за другим.

  1. Сокеты не связаны с конкретным процессом. Когда сокет создан, его счетчик ссылок равен 1. Но с помощью различных методов, таких как dup2, forkи передачи дескриптора файла, можно создать много ссылок на один и тот же сокет, что приведет к увеличению его счетчика ссылок. Некоторые из этих ссылок могут быть из открытой таблицы файловых дескрипторов, которая сама по себе может использоваться многими потоками. Эти потоки могут принадлежать к одной и той же группе потоков (PID )или к разным группам потоков. Когда вы используете флаг -pдля netstat, он перечисляет сокеты, доступные для каждого процесса, и пытается найти процесс для каждого известного сокета. Если есть несколько процессов-кандидатов, нет гарантии, что он покажет интересующий вас процесс.
  2. /proc/<PID>/net/tcpне только перечисляет сокеты, связанные с этим процессом. В нем перечислены все сокеты TCPv4 в сетевом пространстве имен, к которому принадлежит этот процесс. В конфигурации по умолчанию все процессы в системе будут принадлежать одному сетевому пространству имен, поэтому вы увидите один и тот же результат с любым PID. Это также объясняет, почему поток/процесс, который не использует сеть, имеет содержимое в этом файле. Даже если он сам не использует сеть, он все равно принадлежит сетевому пространству имен, в котором другие процессы могут использовать сеть.
  3. /proc/<PID>/net/tcpсодержит как прослушивающие, так и подключенные сокеты. Когда вы передаете -lв netstat, он покажет вам только прослушивающие сокеты. Чтобы приблизить вывод, вам понадобится -a, а не -l.
  4. /proc/<PID>/net/tcpсодержит только сокеты TCPv4. Вам также нужно использовать /proc/<PID>/net/tcp6, чтобы увидеть все сокеты TCP.

Если вас интересуют только сокеты в том же пространстве имен, что и ваш собственный процесс, вам не нужно перебирать разные PID. Вместо этого вы можете использовать /proc/net/tcpи /proc/net/tcp6, поскольку /proc/netявляется символической ссылкой на /proc/self/net.

18
27.01.2020, 21:12

Используйте/proc/<pid>/fd-здесь перечислены все дескрипторы открытых файлов, включая сокеты, используемые процессом. например.

/proc/1278482/fd:
total 0
dr-xr-xr-x. 9 user user  0 Apr 22 23:30../
dr-x------. 2 user user  0 Apr 22 23:30./
lr-x------. 1 user user 64 Apr 22 23:30 4 -> pipe:[640683476]
lrwx------. 1 user user 64 Apr 22 23:30 3 -> socket:[640754628]
lrwx------. 1 user user 64 Apr 22 23:30 2 -> /dev/pts/10
l-wx------. 1 user user 64 Apr 22 23:30 1 -> /home/user/my_sockets.txt
lrwx------. 1 user user 64 Apr 22 23:30 0 -> /dev/pts/10

Затем вы можете найти соответствующую запись (, например. 640754628 )из /proc/<pid>/net/tcp -> inode[6], чтобы получить всю информацию о сокете -, например.

tcp:
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
1864: 0100007F:A650 0100007F:18EB 01 00000000:00000000 00:00000000 00000000   500        0 640754628 1 0000000000000000 20 4 30 10 -1

(выше приведен пример локального подключения к 127.0.0.1 :6379)

0
22.04.2021, 23:40

Теги

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