В Node.js, spawn
позволяет добавлять дополнительные каналы stdio . Кукловод использует это для создания каналов для связи с Chrome процессом без головы. В этом случае Chrome ожидает, что эти каналы всегда будут существовать как файловые дескрипторы 3 и 4 (после stdin, stdout и stderr).
Кажется, нет способа сделать это в:
В этой статье описывается, как создать канал без FD_CLOEXEC
с использованием lib c, что звучит как шаг в правильном направлении. Похоже, ящик nix может сделать это более дружелюбным (по крайней мере, немного менее небезопасным).
Насколько я понимаю, мне нужно:
- Создать два
pipe
без FD_CLOEXEC
(допустим, у них есть FD 8 и 9) fork
- У ребенка
close
любые FD от 2 до 8 dup
два FD, поэтому в конечном итоге они имеют наименьшие доступные номера, теперь 3 и 4 execve
программа, которую я хочу создать
Все это кажется твердо стоящим на территории пешего боя, так что я очень надеюсь, что пропустил лучший способ сделать это.
Есть ли способ сделать это в Rust? В противном случае, какие-либо предложения по моему подходу?