cat
어떤 입력을 기다리는 프로세스를 시작한다고 가정해 보겠습니다 . 예를 들어,
$ cat > out.log
다른 터미널에서는 PID를 식별하고 다음과 같이 파일 설명자 0(0 = STDIN)에 데이터를 입력할 수 있습니다.
$ echo "hello" > /proc/2357/fd/0
그런 다음 첫 번째 터미널이 반응합니다.
$ cat > out.log
hello
몇 가지 질문: 1) 프로그램의 특성상 "hello" 문자열이 파일로 리디렉션되는 대신 실제 터미널에 표시됩니까 cat
(tty/프런트엔드에만 초점을 맞춥니다)?
2) 동일한 프로세스의 stdout을 추적할 수 없습니다.
tail -f /proc/2357/fd/1
...
아무것도 나타나지 않습니다. 여기서 무슨 일이 일어나고 있는지 추측할 수 있나요?
답변1
/proc/2357/fd/0은 터미널 자체인 cat 프로세스의 파일 설명자 0입니다. /proc/2357/fd/1은 cat 프로세스의 파일 설명자 1이며, out.log 파일에 연결됩니다.
이제 /proc/2357/fd/0에 무언가를 echo하면 설명자가 참조하는 파일이기 때문에 터미널로 이동합니다.
/proc/2357/fd/1에 무언가를 echo하면 out.log로 이동하지만 cat을 통해서는 이동하지 않습니다!
이런 식으로 프로세스에 무언가를 다시 에코할 수는 없습니다.
답변2
기본적으로 unix 명령의 T 접합인 tee(1) 명령을 살펴보는 것이 좋습니다. 이 명령은 stdin을 stdout 및 파일로 리디렉션합니다(그런 다음 tail -F를 수행할 수 있음).