1. 程式人生 > >如何獲得unix domain socket的對端PID

如何獲得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 socketPID

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來實現是一種實現方式,當然我們也可以通過數據存儲任務,子節點來完成任務,但是往往使用數據作為任務存儲都需要定制開