터미널에서 실행중인 응용 프로그램을 선택할 수 있습니까?


26

때로는 디버깅을 위해 터미널에서 응용 프로그램을 실행해야합니다. 응용 프로그램을 시작한 후 버그가 곧 발생할 것이라고 확신하면 터미널에서이 응용 프로그램을 실행할 수 있습니다.

그러나 버그가 예기치 않게 발생하면 터미널에서 버그가있는 응용 프로그램 만 모니터링하면됩니다 (출력을 확인하기 위해).

그런 다음 터미널을 사용하여 시작되지 않은 터미널에서 응용 프로그램을 선택할 수 있습니까? 그렇다면 어떻게?


나는 그것이 가장 유익했기 때문에 결국 Michał Šrajer의 대답을 선택했습니다. 그러나 모든 대답은 좋았고 감사했습니다. 건배.
Benjamin

~/.xsession-errorsGUI를 통해 시작한 경우 이전 오류 메시지 (stderr에 대한)가 기록됩니다 .
Lekensteyn

답변:


30

리눅스의 각 프로세스에는 특별한 디렉토리가 /proc/{pid}/fd/있습니다. 0은 stdin, 1은 stdout, 2는 stderr입니다. 따라서 진단 출력에만 관심이 있다고 가정하면 프로세스 pid를 결정할 수 있으며 터미널에서 다음을 수행 할 수 있습니다.

stdout을 보려면 :

cat /proc/{pid of process}/fd/1

stderr를 보려면 :

cat /proc/{pid of process}/fd/2

좋아, 나는 약간 혼란스러워 실행했을 때 cat /proc/1840/fd/1내가 선택한 프로세스 이외의 다른 프로세스에서 출력을 반환하는 것 같습니다. (1840은 현재 시스템 모니터에 따라 Skype 용입니다.) 다른 프로그램의 출력도 표시합니다 ... : |
Benjamin

9

또는 당신이 사용할 수있는 strace다음과 같은

sudo strace -p $pid_of_the_process

6

gdb실행중인 프로세스에 첨부 할 수 있습니다 .

문법은

gdb program pid

디버그 정보가 제거되면 배포 된 응용 프로그램의 기본값 인 소스 코드를 볼 수 없습니다. 그러나 아마도 stdout / stderr 및 디버거 메시지, segfaults를 볼 수 있습니다.


나는 그것을 시도했지만 작동하지 않았다. 예를 들어 시스템 모니터에 Cairo-Dock ID가 1452로 표시되어 있으므로 gdb program 1452(도 시도했습니다 gdb 1452) "1452 : 해당 파일이나 디렉토리가 없습니다."
Benjamin

첫 번째는 작동해야합니다. 무엇을 반환 했습니까?
enzotib

이것은 pid 1840 (Skype)을 요청한 후 완전히 반환되는 것입니다.GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... 1840: No such file or directory.
Benjamin

나는 첫 번째로 말했다 gdb program pid. 당신이 보여준 결과는 다음과 같습니다.gdb pid
enzotib

미안, 내 실수 `gdb 프로그램 3385 (Skype)는 이것을 반환 합니다 .
Benjamin

5

당신이 찾고있는 것 같습니다 retty. "attach tty"를 찾을 수도 있습니다. 기본적으로 사용 ptrace하기 때문에 자신의 롤을 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.