FreeBSD/macOS에서 실행 중인 프로세스의 표준 입력/출력 캡처

FreeBSD/macOS에서 실행 중인 프로세스의 표준 입력/출력 캡처

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

프로세스 파일 시스템fdFreeBSD에서도 사용할 수 있지만 매뉴얼 페이지에서는 아직 구현되지 않은 것 같습니다 . 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)로 사용 가능.

이식성에 관심이 있다면 읽어보세요파일 디스크립터 링크 이식성. 그것은 모든 기반을 다룹니다.

관련 정보