시작된 프로세스의 출력을 파이프할 수 있나요? [복사]

시작된 프로세스의 출력을 파이프할 수 있나요? [복사]

내가 시작했다고 가정하면 program표준 출력에 일부 출력을 쓰는 작업이 진행됩니다. 파이프라인이 생성하는 행 수를 계산할 수 있도록 파이프라인을 추가할 수 있는 방법이 있습니까 wc -l?

답변1

Linux에서는 이 작업을 수행할 수 있습니다. 스크립트가 있다고 가정합니다 s.

#!/bin/bash
i=0
echo my pid: "$$"
while true; do
    echo "$i"; ((i++)); sleep 1; 
done

달리다:

$ ./s
my pid: 8815
0
1
2

그게 다입니다. 이제 gdb프로세스에 연결해야 합니다.

gdb -p 8815

이제 여기에서 다음을 수행하십시오 gdb.

p close(1)

그러면 STDOUT 파일 설명자가 닫힙니다. 이제 새 항목을 엽니다.

p creat("/tmp/8815.out", 0600)

다른 터미널에서는 이미 읽기 프로세스를 설정할 수 있습니다.

tail -f /tmp/8815.out

gdb다른 터미널에서 분리 해야 하므로 아직 진행이 없습니다 . + Ctl또는 D:

q
Quit anyway? (y or n) 

y사용하고 확인하세요 Enter. 이제 다음과 같은 내용이 표시됩니다( tailwhere run).

173
174
175

기존 파일이나 파이프를 사용하려면 다음에서 수행하세요 gdb.

p open("/path/to/your/output", 1)

이는 STDOUT 리디렉션을 보여줍니다. 숫자가 2라는 점을 제외하면 STDERR과 유사합니다.


나는 다음 두 가지 답변을 사용했습니다.

답변2

tee프로그램 시작 시 사용 가능합니다. Bash를 사용하면 다음을 수행할 수 있습니다.

program > >(tee -a log.txt)

program대신 stdout을 실행 중인 프로세스로 리디렉션합니다 tee. 이는 실제로 programto의 표준 출력 사본을 작성합니다 log.txt. tee작동 방식에 따라 이전에 갔던 곳(아마도 터미널)으로 표준 출력을 계속 보낼 것입니다 program.

관련 정보