t초 동안 명령의 stdout을 폐기합니다.

t초 동안 명령의 stdout을 폐기합니다.

나는 다음과 관련된 일부 배치 스크립트를 작업 중입니다.

  • 종료되지 않는 일부 하위 프로세스 실행(비동기식)
  • 기다립니다
  • 다른 작업 수행엑스몇 시간 동안
  • 하위 프로세스 종료

이상적으로는 내보낸 하위 프로세스의 표준 출력을 구별할 수 있기를 원합니다.~ 전에 엑스방출된 것에서~ 후에 엑스.

몇 가지 아이디어가 떠오릅니다. 하지만 이를 어떻게 구현해야 할지 모르겠습니다.

  • 다음에 대한 stdout을 폐기합니다.
  • 섹션을 시각적으로 구분하려면 일부 텍스트(예: '작업 X 시작됨')를 삽입하세요.
  • stdout을 다양한 출력 스트림으로 분할

답변1

exec추가 로 문제를 복잡하게 만들 수도 있지만파일 설명자 랭글링, 두 번째 제안이 가장 간단합니다. 시작하기 전에엑스, echo로그 파일에 대한 마커 문자열입니다.

이러한 모든 명령은 동일한 파일에 추가되므로 모든 출력을 앞에 추가하는 것이 좋습니다.엑스마커를 사용하면 아직 실행 중인 이전 명령 중 하나의 출력과 구분할 수 있습니다. 다음과 같은 내용이 있습니다.

{ X; } | sed 's,^,[X say] ,'

이렇게 하면 추가 분석이 훨씬 간단해집니다. 이는 안전하지 않으며 매우 장황한 프로그램의 경우 경쟁 조건이 자주 발생합니다.

하나의 로그 줄을 깨뜨릴 기회를 잡고 결과 없이 첫 번째 앱 배치를 중단할 수 있는 경우에도 다음과 같이 작동합니다.

{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "\nX started" >> log
kill -CONT %%
{ X; } >> log2

관련 정보