적은 방해로 적은 방해


13

나는 종종 프로그램 출력을 적게 줄인다.

produce_output | less

이것은 produce_output많은 양의 출력을 생성 할 때까지 훌륭하게 작동 합니다. 파일 깊이있는 텍스트를 검색하면 보고서가 줄어 듭니다.

Calculating line numbers... (interrupt to abort)

Control + C로 인터럽트 produce_output하면을 종료하여 추가 출력을 생성하지 못하게합니다. 인터럽트를 덜 보내는 방법이 produce_output있습니까? 그래서 계속 실행됩니까?

나는 사용할 수 있다는 것을 알고 kill -INT less_process있지만 더 나은 해결책이 있어야한다고 생각합니다.

답변:


15

일반적으로 파이프 라인의 모든 프로세스는 동일한 프로세스 그룹 에서 실행되므로 모든 프로세스 가 신호를 수신합니다. 다른 pgrp에서 setsid foo | less실행할 수 있습니다 foo.


OP에 의해 제기 된 문제에 비추어 CTRL + C를 덜 방해하는 방법으로 사용하기로 결정한 것은 매우 불행한 것 같습니다. 이 특정 신호가 선택된 이유를 알고 있습니까? 다른 신호가 덜 문제가 될까요?
Piotr Dobrogost

@PiotrDobrogost : 다른 어떤 신호를 제안 하시겠습니까? 전용 키보드 단축키가있는 사람은 많지 않으며 SIGINT (Ctrl-C) 및 SIGQUIT (Ctrl- \) 만 있으며 후자는 인터럽트가 아니라 프로그램을 즉시 종료해야합니다. 나머지는를 통해서만 이용할 수 있습니다 kill.
user1686

신호를 사용하여 간섭을 줄임으로써 문제가 발생한 것 같습니다. 대신 일반적인 키 / 바로 가기 인 경우 처음에는 문제가되지 않습니다. 그러나 신호가 필요하다는 것은 프로세스가 select파일 / 파이프와 터미널에서 동시에 입력을 기다리는 데 사용할 수 없다는 사실에서 비롯된 것 같습니다.
Piotr Dobrogost 2012 년

@PiotrDobrogost : F(추적) 모드가 작동하는 방식입니다. 파이프와 tty는 같은 방식으로 폴링 가능합니다.
user1686 년

왜 팔로우 모드가 작동하는 방식이라고 생각하십니까? 이벤트 흐름은 쉘이 CTRL + C를 가져 와서 SIGINT 신호를 덜 보내면 키보드 / 터미널 을 듣지 않고이 신호를 비동기 적으로 얻는 것 입니다.
Piotr Dobrogost 2016 년

9

당신은 라인 번호를 비활성화 할 수 있습니다

   -n or --line-numbers

선택권.

produce_output | less -n

-1 : OP의 초기 문제를 해결할 수는 있지만 OP의 실제 질문에 대한 답은 없습니다 (예 : 프로세스 중단).
goldPseudo

2
미안하지만 원하지 않는 기능으로 시작한 다음 스위치를 사용하여 비활성화 할 수있는 기능을 비활성화하기 위해 신호를 보내려고하면 해결책이 아닙니다. 물론 @ grawity 솔루션은 훌륭하지만 투표를했습니다.하지만 다른 그룹에서 첫 번째 프로세스를 시작하여 필요하지 않은 작업 (라인 계산)을 중단하는 신호를 보낼 수 있습니다. 많은 일.
Matteo

1
이것은 내 질문에 제기 된 문제에 대한 공정한 해결책입니다. 그러나 인터럽트는 줄 수를 줄이는 것 이상으로 중지합니다. 예를 들어, 긴 검색도 중단됩니다. 따라서 @grawity의 솔루션이 선호됩니다. 인터럽트의 사용은 적습니다. 질문에서 이것을 더 명확하게 다루지 않은 것에 대한 나의 나쁜!
Ed McMan

@EdMcMan 물론 나는 중력 솔루션을 투표했으며 항상 유용한 새로운 것을 배우게되어 기쁩니다.
Matteo

0

많은 양의 출력으로 작업 할 때 출력을 파일로 보내고 사용 tail -f하거나 less +F보는 것이 매우 도움이됩니다 .

produce_output > out 2>&1 & less +F out

2>&1구문에 stdout 및 stderr를 모두 있는지 확인합니다 out만 원하는 경우 제거 ---이 표준 출력 파일에가는 것을. 이런 식으로 출력을 생성하는 프로그램을 망칠 필요없이 다양한 방법으로 (다른 기계에서도) 출력을 검사 할 수 있습니다.

참고 2>&1될 수있다 Bash 전용 (나는 확실하지 않다). 출력 파일을위한 충분한 디스크 공간이 있는지 확인하십시오 :-)


꼬리는 에드는 그가 대화 형으로 덜 사용 (예를 들어, 그는 파일에서 검색하는) 것을 지정, 당신에게 파일을 보여줍니다
마테오

2>&1POSIX, 베어 >&는 bashism입니다.
user1686 2016 년

FWIW, 2> & 1은 Windows XP, 7, 2008 등에서도 작동합니다.
jftuga

@ Matteo : 예, less +F내 예에서 사용 했어야합니다 . 방금 답변을 업데이트했습니다.
jrennie

1
@Matteo : 행 계산 은 생성 된 데이터를 처리하기 less +F때문에 같은 문제가 아닙니다 less +F. 내가 준 예제 는 원래 게시 된 것과 같은 문제 가 없습니다 . ctrl + c는 중단하지 않습니다 process_output. 하나는 '수행'기능을 상관하지 않는 경우, 하나는 실행 produce_output > out 2>&1less out. 문제 produce_output | less는 파이프가 파손 된 경우 (예를 들어 실수로 'q'를 치는 경우 less) produce_output특수 SIGPIPE 처리없이 죽을 수 있다는 것입니다.
jrennie

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.