내가 실행하는 쉘 스크립트가 있습니다
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
. 이것으로 충분합니다.