다음을 사용하여 애플리케이션을 시작하면:
/path/to/my/command >> /var/log/command.log
명령이 반환되지 않는 경우 다른 프롬프트에서 STDOUT 리디렉션이 어떻게 설정되어 있는지 확인할 수 있는 방법이 있습니까?
비슷한 걸 찾고 있어요
cat /proc/PID/redirects
또는
ps -??? | grep PID
그러나 어떤 방법이든 가능합니다.
답변1
파일 설명자 #1(STDOUT)을 봅니다 /proc/$PID/fd/
. 커널은 이 파일을 설명자가 리디렉션되는 파일에 대한 심볼릭 링크로 나타냅니다.
$ readlink -f /proc/20361/fd/1
/tmp/file
답변2
많은 답변에서 다음과 같이 언급합니다.
tail -f /proc/{PID}/fd/1
그러나 나는 그것이 항상 작동하는 것은 아니라는 것을 발견했습니다. 혹은 cat
때로는 결과를 낳기도 합니다.
cat /proc/{PID}/fd/1
그 중 {PID}는 명령어를 이용하여 찾을 수 있습니다 ps aux
.
명령 끝에 있는 숫자(이 경우 fd/1)를 다른 출력으로 변경할 수 있다는 점도 언급할 가치가 있습니다.
/proc/{PID}/fd/0 # STDIN
/proc/{PID}/fd/1 # STDOUT
/proc/{PID}/fd/2 # STDERR
답변3
어떤 프로세스에 어떤 파일이 열려 있는지 확인하는 유용한 도구lsof
. 특정 프로세스를 가리킬 수 있으며 기본적으로 Linux에서 얻을 수 있는 것과 동일한 정보 (어떤 파일이 열려 있는지) lsof -p1234
를 볼 수 있습니다 .ls -l /proc/1234/fd
가장 유용한 방법 lsof
은 그 반대입니다. 즉, lsof /path/to/file
어떤 프로세스가 파일을 사용하고 있는지 알려주는 것입니다.