답변:
이름없는 파이프는 기본적으로 파일 디스크립터가있는 애플리케이션 전용입니다. 파이프의 트래픽을 관찰하거나 수정하는 원칙적인 방법은 없습니다. 나는 리눅스에서 파이프를 직접 볼 수있는 방법이 없다고 생각합니다.
ptrace 시스템 호출을 통해 당신이 겪고있는 일을 어느 정도 수행 할 수있는 확실한 방법이 있습니다 . 파이프 자체를 다루지 않고 프로세스 중 하나를 택할 것입니다. 관찰, 사용을 위해 strace를 , 예를 들어,
strace -p1234 -s99999 -e write
여기서 1234
파이프에 쓰는 프로세스의 프로세스 ID입니다. 데이터 수정은 어렵지만 수행 할 수 있습니다. 가장 쉬운 방법은 표준 입력을 표준 출력에 복사하는 중간 프로세스와 주입하려는 데이터 (및 제외하려는 데이터 제외)를 먼저 설정하는 것입니다. 두 개의 명명 된 파이프를 작성하고 한 파이프에서는 stdin을 사용하고 다른 파이프에서는 stdout을 사용하여 중간 프로세스를 시작하십시오. 그런 다음 디버거 (예 : GDB )를 사용하여 두 대상 프로세스를 모두 open
해당 명명 된 파이프에서 실행 한 다음 dup
적절한 파일 설명자에 파이프를 배치하십시오. 프로세스에서 프로세스 중 하나가 중단 될 수 있습니다.
(마지막 단락을 이해하지 못하면 죄송하지만 특정 수준의 기술이 필요합니다. 더 쉬운 방법은 없다고 생각합니다.)
파이프 모니터링에 유용한 일부 도구 :
배관을 제어하지 않는 이미 실행중인 프로그램에 대해서는 gdb 방법 :
실행중인 프로세스에서 출력 방향 재 지정을 참조하십시오 .
또는 strace 를 사용할 수 있습니다 .
strace -ewrite -p $PID 2>&1 | grep "write(1"
설명자 1 호출 만 표시합니다. "2> & 1"은 기본적으로 strace가 stderr에 기록하므로 stderr을 stdout으로 리디렉션합니다.