2013-05-26 3 views
2

내 컴퓨터에서 여러 Linux (Ubuntu 10.04) 프로세스를 실행하고 있습니다. 그 중 하나를 시작하면 터미널에서 자세한 정보를 볼 수 있습니다. 다른 프로세스를 통해 12 가지 프로세스를 시작하므로 백그라운드에서 실행됩니다. 그러나 출력이 여전히 양호하고 오류 메시지가 없는지 확인하기 위해 이러한 프로세스 중 하나의 출력을보고 싶습니다. 모든 것을 로그 메시지로 보낼 수는 있지만 너무 많은 디스크 공간 만 사용하게됩니다. 그래서, 프로세스 ID를 사용하여 리눅스에서 실행중인 프로세스의 출력을 "잡아낼"방법이 있습니까? 감사!실행중인 Linux 프로세스 출력을 보는 방법^

+0

그래서 모든 출력을 캡처 할 수있는 충분한 디스크 용량이 없지만 프로세스를 선택하고 출력을보기를 원하십니까? – Szocske

+0

예. 디스크 공간이 많습니다. 문제는 내가 자주 새로 고친 데이터를 얻기 위해 텍스트 파일 (이 파일에서 출력물을 보내는 사람들이 제안하는)을 열고 닫는 것을 좋아하지 않는다는 것입니다. 프로세스를 "잡아"필요가있을 때 자세한 정보를 얻는 것을 선호합니다! – JLavoie

답변

1

사용 리디렉션도 아마

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에 실행 좋아한다.

+0

감사합니다. 그래서 가장 최근의 데이터를 얻으려면 명령을 실행할 때마다 다음과 같이 실행해야합니다 : tail -f yourprog.out? 터미널에서 프로그램이 실행될 때 실제로 볼 수있는 것은 실시간 출력이 아닙니다. – JLavoie

+0

아니요,'tail -f yourprog.out'을 시도해보십시오. 다른 프로그램 (예 :'yourprogram')이 그것을 채우고 있기 때문에'yourprog.out' 파일이 커질 때 더 많은 출력을 보여줍니다 ... –

+0

Ok ...하지만 그것은 실시간이 아닙니다. 파일에서 가장 업데이트 된 텍스트를 얻으려면 명령 (tail -f yourprog.out)을 실행해야합니다 ... 터미널에서 프로그램을 실행할 때처럼 프로세스의 자세한 출력을보고 싶습니다.-s 옵션은 당신이 아래로 가게하지 않을 경우 – JLavoie

4

당신은 (를 리디렉션하기 전에 파일이 존재해야합니다 를) 실행중인 프로세스에 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을 참조하십시오.

관련 문제