Linux에서 프로세스가 파일을 얼마나 멀리 통과하는지 어떻게 알 수 있습니까?


13

다음과 같은 파이프 명령이있는 경우

   cat myfile | processor_application

processor_application은 표준에서 읽은 부분으로, 프로세스에서 파일 cat이 얼마나 멀리 있는지 볼 수 있습니까?

아마도 lsof를 사용합니까?

감사!


지금까지 답변 주셔서 감사합니다! 그러나 명령이 이미 실행 중입니다.
wodow

아 네, 그러면 pv는 그렇게 편리하지 않습니다. 더 명확하게하기 위해 원래 질문을 편집 할 수 있습니다.
Phil Hollenback

실제로이 질문에는 세 가지 큰 답변이 있습니다. 따라서 그대로 두겠습니다.
wodow

1
요약하면 다음과 같습니다. 1. pv (시작하기 전에) 사용 2. lsof -o 사용 (오프셋이 지원되는 경우) 3. / proc / <PID> / io에서 wchar 값을보고 cat의 알려진 PID 프로세스
wodow

답변:


13

pv 를 사용 하여이 작업을 수행 할 수 있습니다.

pv file | processor_application

pv가 통과하면 stdin이 stdout에 직접 전달되므로 고양이를 사용할 필요가 없습니다.

편집 프로그램이 이미 실행 중이면 cat프로세스 의 PID를 찾은 다음 내용을 확인하십시오.

/proc/<PID>/io

그것은 당신이 쓴 바이트 수를 알려줍니다-wchar.


난 단지 당신의 편집을 보았다! 이것은 (i) 체인에 pv가없고 (ii) lsof -o 작동이없는 경우 완벽하게 작동합니다. 감사!
wodow

9

물론! 파이프 뷰어 는이를 정확하게 수행합니다. 파이프 라인에 삽입하면됩니다.

cat myfile | pv | processor_application

cat위 예제에서 최적화 할 수 있습니다 .

pv myfile | processor_application

pv는 입력의 크기를 직접 결정할 수 있기 때문에 실제 진행률 표시기를 제공하는 이점이 있습니다. 파이프 라인 중간에 pv를 사용하는 경우 정확한 진행을 위해 파일 크기를 직접 제공해야합니다.

input_process | pv -s 100M -p | processor_application

pv를 사용자 정의하는 추가 옵션에 대해서는 웹 사이트를 확인하십시오.


pv언제 사용할 수
있는지

and (gdb 's로 네 개의 syscalls)를 pv사용하여 파이프 라인에 삽입하는 것이 다소 쉽습니다 . mkfifogdbp
user1686

@grawity 당신은 그렇게 애타게 할 수 없습니다. 실제 답변을 작성하고 시연하십시오-저는 지금 매우 궁금합니다.
Phil Hollenback

2
해킹이 너무 많기 때문에 여기에 있습니다.
user1686

6

프로세스가 이미 실행중인 경우 lsof에 size/offset도움이 될 수 있는 열이 있습니다 lsof -o -p [PID]. 검사 할 cat 프로세스의 PID를 찾은 다음 찾으십시오 .

프로세스가 아직 실행 중이 아닌 경우 pv다른 사람들이 제안한 것처럼 시스템에 해당 유틸리티가 있다고 가정하는 것이 좋습니다.


이것이 내가 본 lsof 옵션입니다. 그러나 시스템에서 lsof -o를 허용하거나 사용할 수 없으면 어떻게해야합니까?
wodow

경우 -o시스템에없는 작업을 수행 난 당신이 꽤 많이 사용과 관련하여 나사 있다고 생각 lsof: - / (난 당신이 시작한 사용자로 lsof를 실행한다고 가정 cat과정을, 또는 루트로?)
voretaq7

예, 둘 다 시도했습니다. lsof가 -o를 지금 사용할 수없는 것으로 경고하는 이유를 찾고 있습니다 ...
wodow

gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ에 반영된 lsof FAQ는 3.43.2.3 에서 lsof -o를 Linux에서 사용할 수 없음을 나타냅니다. 나는 다른 사용자가 -o lsof를 사용하고있는 것으로 나타나는이, 지나치게 광범위 가정
wodow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.