GUI 터미널 에뮬레이터의 과거 출력(예: 마지막 20줄)을 복제하는 쉘 스크립트를 만들고 싶습니다. 동기는 다음과 같습니다.
시간이 오래 걸리는 프로그램(예: 매우 큰 파일을 다운로드하거나 매우 큰 영화 파일을 변환하는 등)을 수행할 때 가끔 다른 작업이 생각나서 방을 나가야 하는 경우가 있습니다. 이 경우 Ctrl+Z를 눌러 프로세스를 중지합니다. 나는 들어간다
fg; echo $? >> log.txt; date >> log.txt; systemctl poweroff
그런 다음 나는 방을 나갔다.
이 방법은 효과가 있고 나쁘지 않습니다. 하지만 단점이 있는데, 프로그램의 출력을 읽을 수 없다는 것입니다. 상태($?)만 알 수 있어요. 그래서 마지막 20~40줄을 복사해서 로그 파일에 저장하고 싶습니다.
답변1
먼저 를 사용 nohup
하거나 screen
명령을 실행하십시오. tmux
물론 이미 프로세스를 시작한 경우에는 도움이 되지 않습니다.
이 경우 다음을 사용하여 명령의 출력을 캡처할 수 있습니다 strace
.
strace -p<PID> -s9999 -e write 2>&1 | grep -o '".\+[^"]"'
( 프로세스 <PID>
로 교체)PID
프로세스에 연결할 수 없는 경우 /with 또는 strace
로 실행해야 할 수도 있습니다 .root
sudo
ptrace 설정 변경( 0
그리고 보안에 미치는 영향도 알고 있어야 합니다!):
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
그런 다음 해당 출력을 파일로 리디렉션할 수 있습니다.