2009-12-01 4 views

cevap

7

lsof(8)'u kullanabilirsiniz. PID işlem kimliği ve FD ilgilendiğiniz soket dosya tanıtıcı numarası ise, bunu yapabilirsiniz:

lsof -a -p PID -i 4 -T f 

:

lsof -a -p PID -d FD -T f 

bir sürecin tüm IPv4 soketleri listelemek için Bu, diğer bilgilerin yanı sıra SO= ile soket seçeneklerini basacaktır. Hiçbir seçenek belirlenmediyse, boş dizeyi alırsınız, böylece SO=PQLEN=0 vb. Gibi bir şey görürsünüz. SO_BROADCAST için test etmek için SO_BROADCAST dizesinindizesinden sonra grep'i SO=, örn.

if lsof -a -p PID -d FD -T f | grep -q 'SO=[^=]*SO_BROADCAST'; then 
    # socket has SO_BROADCAST 
else 
    # it doesn't 
fi 
+2

Sistemimde (RHEL 5.3) lsof'un "-T" işareti "q" ve "s" harflerini kabul edebilir, ancak "f" değerini kabul etmez. Başka bir çözüm var mı? – dimba

+0

Ayrıca fuser (1) 'http://linux.die.net/man/1/fuser veya' netstat (8) 'http://linux.die.net/man/8/netstat deneyebilirsiniz, ancak eğer lsof işe yaramazsa ve işe yaramazsa, sisteminizde şanstan mahrum kalabilirsiniz. –

2

Linux üzerinde, SO_BROADCAST dahil soket seçenekleri incelemek için knetstat çekirdek modülünü kullanabilirsiniz.