Возьмите стандартный ввод / вывод запущенного процесса под FreeBSD / macOS

В Linux я часто использую /proc/<pid>/fd/[0,1,2] для доступа к std[in,out,err] любого запущенного процесса.

Есть ли способ добиться того же результата в FreeBSD и / или macOS?

  • Как узнать, сколько процессов переключается в контекст?
  • Mac-стиль / специальные клавиши Alt для Linux
  • Загрузите FreeBSD в устаревшем режиме на GPT-диске
  • Получение pid's программы по строкам
  • D state process kill
  • Спросить имя хоста в сценарии оболочки?
  • Удаление дополнительных компонентов FreeBSD
  • Порт net / ntp FreeBSD запрещен CVE-2013-5211, без поддержки вверх по течению
  • sed error: «\ 1 не определено в RE» под OS X
  • FreeBSD: человек выходит в EOF
  • Как я могу перечислить имена каталогов, содержащих имена файлов, соответствующие шаблону?
  • Как предотвратить замену на Mac OS X?
  • 2 Solutions collect form web for “Возьмите стандартный ввод / вывод запущенного процесса под FreeBSD / macOS”

    См. Эту ссылку StackOverflow для ответа, основанного на dtrace. Я тестировал его на FreeBSD, и он отлично работает:

      capture() { sudo dtrace -p "$1" -qn ' syscall::write*:entry /pid == $target && arg0 == 1/ { printf("%s", copyinstr(arg1, arg2)); } ' } 

    procfs также доступен во FreeBSD, но с man-страницы кажется, что fd не реализован. Procfs используется только для совместимости с FreeBSD для Linux.

    Собственная замена procfs на FreeBSD – это procstat, который вы можете использовать с параметром -f для получения дескриптора файла:

     procstat -a -f 

    Другим встроенным инструментом для определения активных файлов является fstat . Помните -m для файлов с отображением памяти, если это необходимо.

     fstat -m 

    Если вам нравится работать через файловую систему, у нас есть devfs, который предоставляет fdescfs, и вы можете получить доступ к fd в соответствии с запросом.

     ls /dev/fd 

    Пример:

     echo -n Hello > hello.txt echo " World!" | cat hello.txt /dev/fd/0 

    Если вы хотите что-то, что переносится через систему на Mac, – тогда вы можете использовать инструмент lsof (LiSt Open Files), который доступен как пакет .

    Если переносимость вызывает беспокойство, вы должны прочитать « Переносимость ссылок файловых дескрипторов» . Он охватывает все базы.

    Linux и Unix - лучшая ОС в мире.