Найти оригинальный процесс владения сокетом Linux

Это потому, что в конструкторе вы объявили локальную переменную с тем же именем, что и атрибут.

Чтобы выделить целочисленный массив, который все элементы инициализированы равным нулю, напишите это в конструкторе:

data = new int[3];

Чтобы выделить целочисленный массив, который имеет другие начальные значения, поместите этот код в конструкторе:

int[] temp = {2, 3, 7};
data = temp;

или:

data = new int[] {2, 3, 7};
16
задан Community 23 May 2017 в 12:02
поделиться

3 ответа

не помогает 'lsof -Ua'?

7
ответ дан 30 November 2019 в 17:52
поделиться

Я не знаю об использовании sendmsg () для «отправки» сокета от одного процесса к другому.

Я знаю, что системный вызов bind () вернет EADDRINUSE, если второй процесс попытается использовать тот же порт.

-2
ответ дан 30 November 2019 в 17:52
поделиться

Вы, вероятно, сможете найти общие сокеты, проанализировав / proc / net / tcp (и подобные «файлы» для других протоколов). Здесь есть несколько документов по / proc / net / tcp .

Вам нужно будет найти сокет (возможно, по его IP-адресам / номерам портов?) И проанализировать номер inode. Получив индексный дескриптор, вы можете выполнять поиск по всему / proc / * / fd / * , вызывая stat для каждой ссылки и проверять член st_ino struct stat , пока не найдете совпадение.

Номер inode должен совпадать между двумя процессами, поэтому, когда вы прошли все / proc / * / fd / * , вы должны были найти их оба.

Если вы действительно знаете идентификатор процесса и fd сокета первого, возможно, вам не нужно проходить через / proc / net / tcp, все, что вам нужно сделать, это указать / proc / / fd / и поиск в остальной части / proc / * / fd / * соответствующего inode. Вам понадобится / proc / net / tcp, если вы хотите получить IP-адреса / номер порта - который вы можете найти, если знаете номер inode

4
ответ дан 30 November 2019 в 17:52
поделиться
Другие вопросы по тегам:

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