К сожалению, я не верю, что вы можете сделать это - MacPorts - все пользовательское пространство, и для требуемой вам операции (либо много хитрости, см. Ниже, либо) взаимодействие с ядром, которое, я считаю, непредстоящий.Например, Mac OSX Internals, системный подход в разделе о передаче файлового дескриптора, говорит
Дескриптор является локальным для процесса в том смысле, что он имеет смысл только впроцесс, который получил дескриптор, скажем, открыв файл.В частности, процесс A не может получить доступ к файлу, который открыт в другом процессе B, просто используя значение дескриптора, представляющего этот файл в B.
, а затем продолжает описывать, как отправляются FD.
Часть "хитрости" потребует, чтобы вы запустили какой-то код (либо в пользовательском пространстве, либо в составе ядра) в другом процессе.
Например, вы можете сделатьон в пользовательской среде, исправляя двоичный файл, который является их исполняемым - найдите в начале пути запуска любую инструкцию, которая обязательно будет выполнена, и поместите вместо нее переход к собственному коду, который отправляет FD вашему процессу демона наблюдения, выполняетисправленная команда, затем возвращается к обычному последовательному потоку другого процесса.
Чтобы сделать это на уровне ядра, потребуются аналогичные исправления либо для самого кода ядра, либо для кода, который ядро загружает и работает с полным, непроверенным доверием (поэтому они могут похитить описание файла не связанного процессая уверен, что в Mac OS X не осталось таких путей к коду (поскольку их основным использованием, несомненно, будут вирусы, троянские кони и другие вредоносные программы всех типов), но, если они есть, вы можетенайдите их, это может быть более общее решение, чем исправление каждого интересующего двоичного исполняемого файла.
Возвращаясь к пользовательскому пространству, другим довольно общим подходом может быть исправление динамически загружаемых библиотек, которые загружают все интересующие процессы, вместо исправлениянесколько исполняемых файлов различных процессов.