내 컴퓨터에서 여러 Linux (Ubuntu 10.04) 프로세스를 실행하고 있습니다. 그 중 하나를 시작하면 터미널에서 자세한 정보를 볼 수 있습니다. 다른 프로세스를 통해 12 가지 프로세스를 시작하므로 백그라운드에서 실행됩니다. 그러나 출력이 여전히 양호하고 오류 메시지가 없는지 확인하기 위해 이러한 프로세스 중 하나의 출력을보고 싶습니다. 모든 것을 로그 메시지로 보낼 수는 있지만 너무 많은 디스크 공간 만 사용하게됩니다. 그래서, 프로세스 ID를 사용하여 리눅스에서 실행중인 프로세스의 출력을 "잡아낼"방법이 있습니까? 감사!실행중인 Linux 프로세스 출력을 보는 방법^
답변
사용 리디렉션도 아마
yourprogram arg1 arg2 > yourprog.out
또는
처럼 (모두 표준 에러 & 표준 출력을 리디렉션 및 백그라운드에서 실행하는) 다른 터미널에서yourprogram arg1 arg2 > yourprog.out 2>&1 &
,
tail -f yourprog.out
을 옵션이 -f
인 경우 tail
명령 파일이 증가 할 때 알과 최신 라인
표시됩니다하지만 난 후 리디렉션하는 휴대용 방법을 볼 수 없습니다. 어쩌면 screen
, batch
, at
, cron
이 도움이 될 수 있습니다. 또는 BTW /proc/1234/fd/1
...
를 열고, 나는
... 당신이 당신의 출력에 충분한 임시 디스크 공간이없는 당황 스럽네요 그리고 이맥스에서 M-x shell
를 실행하고, 거기에 내 programm에 실행 좋아한다.
감사합니다. 그래서 가장 최근의 데이터를 얻으려면 명령을 실행할 때마다 다음과 같이 실행해야합니다 : tail -f yourprog.out? 터미널에서 프로그램이 실행될 때 실제로 볼 수있는 것은 실시간 출력이 아닙니다. – JLavoie
아니요,'tail -f yourprog.out'을 시도해보십시오. 다른 프로그램 (예 :'yourprogram')이 그것을 채우고 있기 때문에'yourprog.out' 파일이 커질 때 더 많은 출력을 보여줍니다 ... –
Ok ...하지만 그것은 실시간이 아닙니다. 파일에서 가장 업데이트 된 텍스트를 얻으려면 명령 (tail -f yourprog.out)을 실행해야합니다 ... 터미널에서 프로그램을 실행할 때처럼 프로세스의 자세한 출력을보고 싶습니다.-s 옵션은 당신이 아래로 가게하지 않을 경우 – JLavoie
당신은 (를 리디렉션하기 전에 파일이 존재해야합니다 를) 실행중인 프로세스에 GDB을 장착하고 출력을보고 기분 때마다 일부 로그 파일에 표준 출력/ERR 또는 둘 모두를 리디렉션 할 수 있습니다 :
gdb attach PID (gdb) p dup2(open("/tmp/mylogfile-stdout", 0), 1) (gdb) p dup2(open("/tmp/mylogfile-stderr", 0), 2) (gdb) detach (gdb) quit당신이 그들을 침묵으로 돌아 가고 싶어
은 수행
gdb attach PID (gdb) p dup2(open("/dev/null", 0), 1) (gdb) p dup2(open("/dev/null", 0), 2) (gdb) detach (gdb) quit
'분리'부분이 중요하다, 그렇지 않으면 당신은 당신이 때 g에 부착하고있는 프로세스를 종료합니다 db가 종료됩니다. 자세한 내용은 this question을 참조하십시오.
그래서 모든 출력을 캡처 할 수있는 충분한 디스크 용량이 없지만 프로세스를 선택하고 출력을보기를 원하십니까? – Szocske
예. 디스크 공간이 많습니다. 문제는 내가 자주 새로 고친 데이터를 얻기 위해 텍스트 파일 (이 파일에서 출력물을 보내는 사람들이 제안하는)을 열고 닫는 것을 좋아하지 않는다는 것입니다. 프로세스를 "잡아"필요가있을 때 자세한 정보를 얻는 것을 선호합니다! – JLavoie