LINUX.ORG.RU

Процесс хочет сообщить о себе данные

 , ,


1

3

Привет. У меня есть процесс пусть tokenizer, который запускается независимо от меня и генерирует внутри себя токен, с которым дальше работает как ему надо. Внешний процесс хочет этот токен прочитать по PIDу tokenizer-a. Я могу менять код tokenizer-a, он на питоне. Конечно, можно нагородить IPC или писать временные файлы типа /tmp/tokenizer.PID, но по-моему и IPC и временные файлы для одной строки текста - это очень криво. Может ли tokenizer записать внутри себя этот токен таким образом, которую можно будет прочитать, например, через /proc/PID/?

Типа

# ???
magic(token)


# из внешнего шелла...
cat /proc/PID/magic
7b-4


Код Linux-only, о переносимости можно не заботиться.

Доступ то в /proc/pid/ будет? Можно закодировать в cmdline или переменные окружения (environ), но читать всё это можно либо под рутом, либо под пользователем процесса.

... и временные файлы для одной строки текста - это очень криво

Кривто это трахать мозги неочевидными костылями.

mashina ★★★★★ ()
Последнее исправление: mashina (всего исправлений: 1)
Ответ на: комментарий от mashina

Разве environ меняется автоматически, если я сделаю новую переменную окружения внутри процесса? Я могу сделать setenv() внутри процесса, но эта же переменная не будет видна в environ.

former_anonymous ★★ ()
Ответ на: комментарий от mashina

меняется если ты перезапишешь уже имеющееся env (третий параметр main()), но не более той длины, которая уже есть. То есть придётся пожертвовать какой-то переменной окружения и перезаписать её, даже не знаю.

former_anonymous ★★ ()

Сделай абстракцию:

Сделай так чтобы можно было запустить твой процесс примерно так:

tokenizer --client token get

а уж он там хоть через ipc или с яндексдиска возьмет твой токен. смысл в том что механизм ты всегда можешь поменять не затрагивая код использующий этот самый токен

subwoofer ★★★★★ ()
Ответ на: комментарий от former_anonymous

придётся пожертвовать какой-то переменной

так а ты запускай либо с дополнительной опцией типа prog token=000..., либо с новой переменной token=000... prog. главное, чтобы количество нулей соответствовало длине токена.

ещё на стеке есть таблица elf auxiliary table и она тоже доступна в /proc/PID/axuv.

anonymous ()
Ответ на: комментарий от former_anonymous

удалять при следующем запуске, удалять в обработчике сигнала, не удалять (/tmp). нормальный человек бы сделал open().write().close() и поехал дальше, сразу видно кому делать нечего.

anonymous ()
Ответ на: комментарий от x905

так а что в задаче не ясно? :) Есть внешний процесс, который хочет получить от работающих токенайзеров только одно - их сгенерированный токен. Я могу менять код токенайзеров, он на питоне.

former_anonymous ★★ ()
Ответ на: комментарий от former_anonymous

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

x905 ★★★★★ ()