如何獲得unix domain socket的對端PID
1. 什麼是unix domain socket
2. 有兩種方法,第一種是通過猜測,第二種是debug linux核心
第一種方法的示例:
[[email protected] ipc]$ /usr/sbin/lsof -p 31854
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
server 31854 test cwd DIR 0,26 4096 15746636 /home/test/workspace_ipc/ipc
server 31854 test rtd DIR 8,2 4096 2 /
server 31854 test txt REG 0,26 8702 15746641 /home/test/workspace_ipc/ipc/server
server 31854 test mem REG 8,2 144776 52035586 /lib64/ld-2.5.so
server 31854 test mem REG 8,2 1722328 52035588 /lib64/libc-2.5.so
server 31854 test 0u CHR 136,2 0t0 4 /dev/pts/2
server 31854 test 1u CHR 136,2 0t0 4 /dev/pts/2
server 31854 test 2u CHR 136,2 0t0 4 /dev/pts/2
server 31854 test 3u unix 0xffff8101c8d39180 0t0 650000043 ./socket
[ [email protected] ipc]$ /usr/sbin/lsof -p 32028
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
client 32028 test cwd DIR 0,26 4096 15746636 /home/test/workspace_ipc/ipc
client 32028 test rtd DIR 8,2 4096 2 /
client 32028 test txt REG 0,26 8199 15746715 /home/test/workspace_ipc/ipc/client
client 32028 test mem REG 8,2 144776 52035586 /lib64/ld-2.5.so
client 32028 test mem REG 8,2 1722328 52035588 /lib64/libc-2.5.so
client 32028 test 0u CHR 136,2 0t0 4 /dev/pts/2
client 32028 test 1u CHR 136,2 0t0 4 /dev/pts/2
client 32028 test 2u CHR 136,2 0t0 4 /dev/pts/2
client 32028 test 3u unix 0xffff810010eaa080 0t0 650002435 socket
[ [email protected] ipc]$ netstat -na | grep 65000
unix 2 [ ACC ] STREAM LISTENING 650000043 ./socket
unix 3 [ ] STREAM CONNECTED 650002215 ./socket
unix 3 [ ] STREAM CONNECTED 650002435
上例中是通過65000來grep的,這就是猜測。
第二種方法:
不能直接獲得對端的資訊的原因是,因linux核心對user space是不可見的。
The number shown in /proc/$pid/fd/$fd
is the socket's inode number in the virtual socket filesystem. When you create a pipe or socket pair, each end successively receives an inode number. The numbers are attributed sequentially, so there is
a high probability that the numbers differ by 1, but this is not guaranteed (either because the first socket was
N and N+1 was already in use due to wrapping, or because some other thread was scheduled between the two inode allocations and that thread created some inodes too).
相關推薦
如何獲得unix domain socket的對端PID
1. 什麼是unix domain socket 2. 有兩種方法,第一種是通過猜測,第二種是debug linux核心 第一種方法的示例: [[email protected] ipc]$ /usr/sbin/lsof -p 31854 COMMAND
go語言實現unix domain socket 客戶端/服務端
sock domain tin soc reader ted ips for urn /*server.go */package mainimport ( "bufio" "fmt" &quo
由一個簡單需求到Linux環境下的syslog、unix domain socket
message python domain 服務器 import 需求:回到頂部 工作中有一個在Linux(debian8)環境下運行的服務器程序,用python語言實現,代碼中有不同優先級的日誌需要記錄,開發的時候都是使用python的logging模塊輸出到文件,示例代碼如下:
Unix domain socket 簡介
進程間通訊 ima cli strlen side 組件 errno doc i++ Unix domain socket 又叫 IPC(inter-process communication 進程間通信) socket,用於實現同一主機上的進程間通信。socket 原本是
linux一切皆檔案之Unix domain socket描述符(二)
一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 3、主要用於:執行在同一臺機器上的2個程序相互之間的資料通訊 4、它們和網路檔案描述符非常相似(比如:TCP
基於libevent和unix domain socket的本地server
https://www.pacificsimplicity.ca/blog/libevent-echo-server-tutorial 根據這一篇寫一個最簡單的demo。然後開始寫client。 client調優 client最初的程式碼如下: 1 #include <sys/socke
Linux下程序間通訊方式 - UNIX Domain Socket
概述 Linux下程序通訊方式有很多,比較典型的有套接字,平時比較常用的套接字是基於TCP/IP協議的,適用於兩臺不同主機上兩個程序間通訊, 通訊之前需要指定IP地址. 但是如果同一臺主機上兩個程序間通訊用套接字,還需要指定ip地址,有點過於繁瑣. 這個時候就需要用到UNIX Domain Sock
UNIX Domain Socket
Unix domain socket 又叫 IPC(inter-process communication 程序間通訊) socket,用於實現同一主機上的程序間通訊。socket 原本是為網路通訊設計的,但後來在 socket 的框架上發展出一種 IPC 機制,就是 UNIX domain soc
android原始碼中採用Unix Domain Socket跨程序通訊
今天看android原始碼Zygote程序啟動流程,無意間發現使用了一種檔案描述符作為跨程序通訊的地址,於是仔細研究了一下: 從字面來理解是傳統的Socket使用,但個人覺得不應該是,特地找資料學習了一下,下面的介紹比較詳細到位。又進一步瞭解一下,使用的其實是
linux一切皆檔案之Unix domain socket描述符
一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 二、環境準備 元件 版本 OS CentOS Linux release 7.5.1804
UNIX DOMAIN SOCKET效率
nvidia 4.5 1.3 但是 效率 cti work mman running 關於UNIX DOMAIN SOCKET和普通udp socket的對比 在TX1(4核A57 1.7GHz)的板卡上進行測試,每個包大小設置為1024,全速收發,UDS的速度在90Mbp
[外一篇]關於Unix Domain Socket
咋一看名字,雖然有個socket,但是它的用場和常說的“網路”socket有所不同。它實際上是一種本地IPC,以socket為名是因為它和普通socket使用的介面是一致的。 雖說普通的socket也可以用作本地IPC,但是從效率上和功能上,要遜於Unix Domain
unix Domain socket(python)
1. unix Domain Socket 簡介 Unix Domain Socket通常稱為 【unix域套介面】 或 【本地套介面】,它用於位於同一臺機器(作業系統)的程序間通訊。它已經被納入POSIX Operating Systems標準。 它支援以
UNIX Domain Socket使用
一、Socket概述 Socket最初用在基於TCP/IP網路間程序通訊中,以客戶端/伺服器模式進行通訊。 實現非同步操作,共享資源集中處理,提高客戶端響應能力。 Tcp通訊基本流程: 伺服器端
使用psql命令基於udp(unix-domain-socket)協議連線postgresql資料庫
對於資料庫連線而言,通過netstat可以檢視當前連線協議,是udp還是tcp(包括ipv4和ipv6)。 實驗1: 如果本地直接使用psql命令連線,則為udp: 視窗1: postgres@pgdb-> psql psql (9.5.7) T
socket unix domain IPC程式碼示例
僅供參考: 服務端:socket->bind->listen->send/recv->close 客戶端:socket->bind->connect->send/recv->close #include <sys/socke
C++傳智筆記(6):socket客戶端發送報文接受報文的api接口
內存泄露 rcp 分配內存 strcpy light cpp tac 第三方 _file__ #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "string.
Java網絡編程【Socket服務端和客戶端】
rgs .net aio highlight 如果 org author oid try Socket 編程大家都不陌生,Java 學習中必學的部分,也是 Java網絡編程核心內容之一。Java 網絡編程又包括 TCP、UDP,URL 等模塊。TCP 對應 Socket
Socket服務端
reading poi ext clas ets protoc 等待 sta emp using System; using System.Collections.Generic; using System.Linq; using System.Text; using S
C#使用Socket實現一個socket服務器與多個socket客戶端通信
當前 rec inf hide 負責 new 數據庫 class 多臺 在分布式調度系統中,如果要實現調度服務器與多臺計算節點服務器之間通信,采用socket來實現是一種實現方式,當然我們也可以通過數據存儲任務,子節點來完成任務,但是往往使用數據作為任務存儲都需要定制開