실행중인 프로세스의 STDOUT 리디렉션을 참조하십시오.


17

이 명령으로 앱을 시작하면 :

/path/to/my/command >> /var/log/command.log

그리고 명령이 반환되지 않습니다. 다른 프롬프트에서 STDOUT 리디렉션이 무엇으로 설정되어 있는지 확인할 수 있습니까?

나 같은 것을 찾고 있어요

cat /proc/PID/redirects

또는

ps -??? | grep PID

그러나 모든 방법이 가능합니다.

답변:


22

에서 파일 설명자 # 1 (STDOUT)을 확인하십시오 /proc/$PID/fd/. 커널은이 파일을 설명자가 경로 재 지정된 파일에 대한 기호 링크로 나타냅니다.

$ readlink -f /proc/20361/fd/1
/tmp/file

완전한! 감사! STDERR과 같은 다른 리디렉션에 대한 링크 또는 세부 정보를 제공 할 수 있습니까?
Rich

적어도 Linux에서는 (그리고 다른 모든 유닉스 계열 OS를 믿는다) 0 : stdin, 1 : stdout, 2 : stderr (표준 오류)입니다. <stdio.h>에 STD {IN, OUT, ERR} _FILENO로 정의 된 C 매크로도 있습니다. 자세한 내용은 'man stdout'을 참조하십시오.
Petr Uzel

stdin, stdout 및 stderr의 경우 0, 1, 2는 모든 Unix / Unix 계열 시스템에서 각각 보장되며 Windows에서도 마찬가지입니다.
Paul Stelian

MacOS 에서이 작업을 수행 할 수있는 방법이 있습니까? / proc / <pid> / fd / 1이 존재하지 않습니다. mkfifo를 사용할 수 있습니까?
Alexander Mills

4

어떤 프로세스가 어떤 파일을 열 었는지 확인할 수있는 유용한 도구입니다 lsof. 로 특정 프로세스를 가리킬 수 있으며 Linux에서 lsof -p1234얻을 수있는 것과 같은 정보 ls -l /proc/1234/fd, 즉 어떤 파일이 열려 있는지 대부분 알 수 있습니다 .

가장 유용한 것은 lsof다른 방법으로 진행하는 것입니다 . lsof /path/to/file어떤 프로세스가 해당 파일을 사용하고 있는지 알려줍니다.


1

많은 답변에 다음과 같이 언급했습니다.

tail -f /proc/{PID}/fd/1

그러나 항상 작동하지는 않습니다. 또는 cat때때로 결과가 생성됩니다.

cat /proc/{PID}/fd/1

여기서 ps aux명령 을 사용하여 {PID}를 찾을 수 있습니다 .

또한 명령 끝의 숫자 (이 경우 fd / 1)는 다른 출력에 대해 변경 될 수 있습니다.

 /proc/{PID}/fd/0 # STDIN
 /proc/{PID}/fd/1 # STDOUT
 /proc/{PID}/fd/2 # STDERR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.