PID를 사용하여 모든 프로세스의 출력을 읽을 수 있습니까?


32

fg작업 명령 을 사용하는 것과 유사한 방식으로 PID를 사용하여 이미 실행중인 프로세스에 터미널을 연결할 수 있습니까?


무엇처럼?! 첨부하려는 프로세스는 무엇입니까?!

다른 터미널에서 시작된 프로그램의 출력을보고 싶습니다.
Tommy

답변:


43

해당 프로세스의 표준 파일 디스크립터를 얻을 수 있습니다. 예 stdout:

tail -f /proc/<pid>/fd/1

8
이 솔루션을 top으로 시도했지만 작동하지 않는 것 같습니다. 터미널에서 top을 시작했고 다른 곳에서는 pid와 함께 명령을 사용했지만 출력이 없었습니다.
토미

1
Mac에서이 작업을 어떻게 수행합니까?
Avner Barr

stderr는 어떻습니까? 나는 / proc / <pid> / fd / 2라고 가정하지만 어떻게 stdout / stderr을 얻습니까?
Alexander Mills

1
이 설명자가 소켓을 가리키는 경우 어떻게해야합니까? 꼬리는 읽을 수 없습니다. # ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Imaskar는 Reinstate Monica가

8

여기 몇 가지 옵션이 있습니다. 하나는 명령의 출력을 파일로 리디렉션 한 다음 tail해당 파일에 실시간으로 추가되는 새 줄을 보는 데 사용 하는 것입니다.

또 다른 옵션은 내부에서 프로그램을 시작 screen하는 것인데, 일종의 텍스트 기반 터미널 응용 프로그램입니다. 스크린 세션은 연결하거나 분리 할 수 ​​있지만 명목상 동일한 사용자 만 사용하도록되어 있으므로 사용자간에 공유하려면이 세션을 사용하십시오.

그렇지 않으면 프로세스를 추적하고 프로세스가 수행하는 작업을 볼 수 있습니다 strace.

strace -e trace=open -p 22254 -s 80 -o output.txt
  • -p PID: 프로세스 ID PID로 프로세스에 첨부하고 추적을 시작하십시오.
  • -s SIZE: 인쇄 할 최대 문자열 크기를 지정합니다 (기본값은 32).
  • -o filename: 추적 출력을 화면 (stderr)이 아닌 파일 파일 이름에 씁니다.

마지막으로 작동하지 않는 것 같습니다. 나는 top을 시작했고 다른 것은 corpid pid와 함께 명령을 사용했지만 예상되는 결과를 얻지 못했습니다. 나중에 꼬리를 사용할 때.
토미

당신은 사용할 필요가 sudo프로세스에 연결하고 사용하는 strace를 가진 -o ~/output.txt파일이 홈 폴더에 남아 있도록.

출력 파일을 사용하고 화면으로 보내지 마십시오! 내가 바보처럼 굴지 말고 Ctrl-C를 눌러 strace에서 빠져 나와 PID를 분리하십시오. 중요한 대본에서 내게 겁을 먹었어.
Weston Ganger

3

아래에 제공된 이러한 명령을 사용하여 다른 터미널에서 실행중인 프로세스를 연결할 수 있습니다.

  • retty(Man page : retty )
  • reptyr
  • screen

예:

screen -S PID
retty $(pgrep PID)
reptyr PID

나는 retty 나 reptry를 찾을 수 없었다. 또한 화면을 사용하려면 원래 프로세스를 시작해야 문제가 해결되지 않습니다.
토미

명령을 사용하여 설치할 수 sudo apt-get install retty있지만 retty에는 제한이 거의 없습니다. 답변에 언급 된 맨 페이지를 확인하십시오.
devav2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.