Боюсь, что ответ slm (в настоящее время отмеченный как правильный) неверен по целому ряду аспектов.
Во-первых, ОП спрашивал, есть ли способ узнать извне, есть ли у процесса данные, ожидающие передачи на сокете AF_UNIX. Ответ slm требует модификации самого процесса. Вообще, netstat полезен для внешнего исследования процесса, поведение которого вы не можете контролировать. Он может быть полезен, чтобы узнать, есть ли у процесса непрочитанные данные, что может указывать на то, что процесс не обслуживает свой сокет должным образом при чтении (т.е., возможно, у него есть ошибка, или он неправильно сконфигурирован, или поток умер).
Во-вторых, slm указывает, что вы не можете сделать это даже внутри процесса, кроме как читать сокет, пока он не опустеет. Также неверно. Процесс может использовать иоктл SIOCINQ/FIONREAD
для определения количества данных в сокете, не читая его (я предпочитаю FIONREAD
, потому что он означает то же самое в большем количестве контекстов и поэтому более общепризнан, чем SIOCINQ
, который специфичен для сокетов). См. man-страницу unix(7).
Наконец, в Linux есть способ сделать то, о чем просил ОП (внешне определить количество данных, ожидающих обработки на сокете домена unix), используя программу ss
, а не netstat
. ss -ax
сделает это. Это что-то вроде netstat
на стероидах. См. страницу руководства ss(8).
Con comando simpleawk
:
awk -F':' 'NR==FNR{ a[$3]=$1; next }{ print $1", "a[$4] }' /etc/group /etc/passwd
-F':'
-separador de campo NR==FNR{ a[$3]=$1; next }
-procesando el primer archivo de entrada (es decir,/etc/group
):a[$3]=$1
-captura nombre de grupo$1
usando identificador de grupo$3
como matriz a
clave next
-saltar al siguiente registro { print $1", "a[$4] }
-acción para el segundo archivo de entrada (es decir,/etc/passwd
):$1
-el primer campo;indicando nombre de usuarioa[$4]
-obtener nombre de grupo por ID de grupo (presentado por campo$4
)Lo siguiente hace un JOIN relacional en los dos archivos en el GID y genera el nombre de usuario y el nombre del grupo con un :
en -entre:
join -t : -1 4 -2 3 -o 1.1,2.1 \
<( sort -t : -k4,4 /etc/passwd ) \
<( sort -t : -k3,3 /etc/group )
El GID está en la columna 4 del archivo passwd
y en la columna 3 del archivo group
.
Con -1
y -2
especificamos cuál es el campo de unión en los dos archivos de entrada y con -o
especificamos qué campos queremos generar de cada archivo (el primer campo de cada archivo ).
La clasificación de cada archivo en el campo de combinación es necesaria para que join
funcione.
Para obtener esto en el formato exacto solicitado, solo canalícelo a través de sed 's/:/, /'
que reemplaza los dos puntos con coma y espacio.