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

То, что вы пытаетесь сделать, это вывести список содержимого каталога запрещеноDir .

Если сервер не позволяет выводить список содержимого определенного каталога, вы получаете ошибку 403.14 Каталог запрещен .

Ответ: нет, нельзя.

4
10.05.2017, 00:37
2 ответа

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

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

procfs также доступен во FreeBSD, но из справочной страницы видно, что 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), который доступен в виде пакета.

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

0
27.01.2020, 20:53

Теги

Похожие вопросы