2013-01-06 9 views
10

백그라운드 (sh 스크립트)에서 실행중인 프로세스가 있고이 프로세스의 출력을 인터럽트하지 않고도 볼 수 있는지 궁금합니다.리눅스에서 이미 실행중인 프로세스의 출력보기

일부 응용 프로그램에서 프로세스가 실행되었지만 그렇지 않은 경우 나중에 볼 수 있도록 화면에 연결했을 것입니다. 완료하는 데 1 시간이 걸릴 수 있으며 오류없이 정상적으로 실행되는지 확인하려고합니다.

+2

입니다 :

또한 GDB를 사용하여 파일 기술자를 조작 할 수 있습니까? 일반 텍스트입니까? 그렇다면 "tail -f "을 사용할 수 있습니다. 꼬리는 파일의 끝을, -f 플래그는 파일의 "따라 가기"를 지시합니다. 꼬리 명령에는 줄 수를 지정하는 옵션이 있으며 파일 폴링 사이의 대기 시간을 생각할 수 있습니다. – Mike

+0

문제는, 내가이 프로세스를 시작하지 않았기 때문에 공급자가 실행 한 일부 응용 프로그램 (cpanel 설치 프로그램)에서 시작했고 다른 파일로 출력을 리디렉션하지 않았기 때문에 제안한 것처럼 꼬리를 사용했을 것입니다. 거기 출력을 볼 수있는 방법? –

답변

4

, retty :

http://pasky.or.cz/dev/retty/ 실행중인 프로그램이 이미 청각 장애에 연결되어있는 경우, 그것은 작동

, 그렇게하지 백그라운드에서 프로그램을 실행하면 작동하는지 확인하십시오.

적어도 좋은 힌트를 줄 수 있습니다. :)

ptrace(2)을 사용하여 프로그램의 종료 코드를 찾을 수 있습니다. 그렇지 않으면 gdb -p <pid>을 사용하여 프로세스에 연결하면 프로그램이 종료 될 때 인쇄됩니다. 이 출력의 어떤 종류의

(gdb) p close(1) 
$1 = 0 
(gdb) p creat("/tmp/stdout", 0600) 
$2 = 1 

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/

1

/proc/[pid]/fd/[012] 트리플에 연결하려고 할 수는 있지만 작동하지 않을 수 있습니다.

내 생각에 떠올랐다는 다음 아이디어는 strace -p [pid]이지만 "prittified"출력이 나옵니다. 가능한 해결책은 ptrace(2)을 사용하여 작은 프로그램을 작성하여 write(2)에 연결하고 데이터를 어딘가에 쓰는 것입니다. 으로 작동하지만 불과 몇 초 만에 완료되지는 않습니다. 특히 C 프로그래밍에 익숙하지 않은 경우 더욱 그렇습니다.

불행히도 나는 당신이 원하는 것을 정확하게하는 프로그램을 생각할 수 없다. 그래서 나는 당신에게 그것을 어떻게 쓰는지에 대한 힌트를 준다. 행운을 빕니다! 이 작업을 수행하기 위해 리눅스에서의 ptrace (2)를 사용하는 프로그램이 이미 있습니다

관련 문제