очень просто. вкаждом процессе что зачат ядром рождаются три файла
с дескрипторами 0, 1 и 2 - это stdin stdout и stderr. как известно
это внутри процесса они 0 1 2, но на самом деле они есть обычные
символьные файлы в FS и доступны с наружи. для доступа к ним
снаружи нужно знать где они располагаются чтоб их открить и
записать в них - для этого нужно знать PID процесса расщарить
выввод-вывод которого хочется. лежат они родимые в
/proc/PID/fd/0
/proc/PID/fd/1
/proc/PID/fd/2
остается только их открыть и начать работать. ниже картинка с примером как оное выглядит если не в коде а в другой консоли всунуть
но модно теперь это делать через файловую систему ядра : /sys