실행중인 프로세스의 STDOUT 리디렉션을 참조하십시오. >> /var/log/command.log 그리고 명령이 반환되지 않습니다. 다른 프롬프트에서

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

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

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

나 같은 것을 찾고 있어요

cat /proc/PID/redirects

또는

ps -??? | grep PID

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



답변

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

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

답변

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

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


답변

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

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