백그라운드 프로세스에서 pkill의 출력을 억제하고 싶습니다.

백그라운드 프로세스에서 pkill의 출력을 억제하고 싶습니다.

내가 실행하는 쉘 스크립트가 있습니다

iostat -c 1  > data.cpu. &

스크립트 후반부에서 관심 있는 데이터를 수집한 후 다음을 수행합니다.

pkill iostat

iostat를 종료하고 data.cpu 처리를 계속하고 stdout에 기록된 보고서를 생성할 수 있습니다. 보고서의 일부에는 다음이 포함됩니다.

[1]+  Terminated              iostat -c 1  > data.cpu

pkill에 의해 생성되었습니다. 미학적 이유로 "종료됨" 메시지가 표시되는 것을 방지하고 싶습니다. 다양한 리디렉션을 시도했지만 지금까지 성공하지 못했습니다.

출력에서 이 부분을 방지할 수 있는 방법이 있나요?

답변1

@콰지모도한번 보도록 권해드려요https://stackoverflow.com/q/81520나는 이것이 도움이 되지 않는다고 생각합니다. 그러나 해당 게시물의 제안 중 하나는 다음과 같습니다.https://stackoverflow.com/q/5719030/1997354

이는 disown(매뉴얼 페이지) 내 문제를 정확하게 해결하기 위해. 지금 바로:

iostat -c 1 > data.cpu &
disown
# collect required data
pkill iostat

거부를 사용하는 것 외에도 억제하는 방법이 있습니다.종료" disown 메시지를 사용하지 마십시오. 즉, 아래와 같이 pkill 대신 kill을 사용하십시오.

iostat -c 1 > data.cpu &
iostat_pid=$(pidof)
# collect required data
kill -9 $iostat_pid

답변2

연결한 질문에 대한 답변에서 설명했듯이 이러한 메시지의 표시는 명령을 통해 제어할 수 있습니다 wait.

따라서 한 가지 접근 방식은 iostat백그라운드에서 실행하고 wait리디렉션된 stderr을 사용하여 즉시 실행하고 기다리지 않도록 전체 복합 명령을 백그라운드에서 다시 실행하는 것입니다 wait.

그건:

(iostat -c 1 > data.cpu & wait 2>/dev/null) &

그 이후에는 이전과 같이 진행하시면 됩니다 pkill iostat.

실제로 iostat 쉘이 아닌 하위 프로세스가 상위 프로세스가 되도록 프로세스를 정확히 찾아내도록 주의하십시오 iostat. A는 현재 실행 중인 모든 프로세스를 pkill iostat 종료합니다 iostat. 이것으로 충분합니다.

관련 정보