Linux에서는 실행 중인 프로세스에 /proc/<pid>/fd/[0,1,2]
액세스하기 위해 이것을 자주 사용합니다 .std[in,out,err]
FreeBSD 및/또는 macOS에서 동일한 결과를 얻을 수 있는 방법이 있습니까?
답변1
바라보다이 StackOverflow 링크이에 대한 dtrace 기반 답변입니다. FreeBSD에서 이것을 테스트했는데 잘 작동합니다.
capture() {
sudo dtrace -p "$1" -qn '
syscall::write*:entry
/pid == $target && arg0 == 1/ {
printf("%s", copyinstr(arg1, arg2));
}
'
}
답변2
프로세스 파일 시스템fd
FreeBSD에서도 사용할 수 있지만 매뉴얼 페이지에서는 아직 구현되지 않은 것 같습니다 . Procfs는 일반적으로 Linux 호환성을 위해 FreeBSD에서만 사용됩니다.
FreeBSD에서 procfs의 기본 대체는 다음과 같습니다.프로그램 통계-f
이를 매개변수와 함께 사용하여 파일 설명자를 얻을 수 있습니다.
procstat -a -f
활성 파일을 식별하는 또 다른 기본 도구는 다음과 같습니다.통계자료. -m
필요한 경우 메모리 매핑 파일을 기억하세요 .
fstat -m
파일 시스템 작업을 선호하는 경우파일 시스템 개발이 노출fdescfs넌 방문 할 수있다FD요청하신 방식으로요.
ls /dev/fd
예:
echo -n Hello > hello.txt
echo " World!" | cat hello.txt /dev/fd/0
Mac으로의 교차 시스템 포팅을 위한 도구도 원하는 경우 이 도구를 사용할 수 있습니다.라소프(LiSt Open Files)로 사용 가능팩.
이식성에 관심이 있다면 읽어보세요파일 디스크립터 링크 이식성. 그것은 모든 기반을 다룹니다.