프로세스가 연 파이프에 해당하는 파일을 찾는 방법은 무엇입니까? [복사]

프로세스가 연 파이프에 해당하는 파일을 찾는 방법은 무엇입니까? [복사]

나는 하드코딩된 파이프에서 수신된 문자를 수신하고 eval해당 문자를 시도하는 이 스크립트를 만들었습니다. 내 스크립트를 호출했는데 loop_executor.sh 이것이 포함된 전부입니다.

!/bin/bash

while :
do
    x=`cat /tmp/console_test`;
    echo "received $x"
    eval $x
done;

두 번 클릭하여 스크립트를 실행합니다.

이 프로세스에서 어떤 파일이 열려 있는지 확인하고 싶습니다.

> $ pgrep loop_executor.sh
1234

> $ ll /proc/1234/fd
dr-x------ 2 userX domain^users  0 Oct 20 17:57 ./
dr-xr-xr-x 9 userX domain^users  0 Oct 20 17:57 ../
lr-x------ 1 userX domain^users 64 Oct 20 17:57 0 -> /dev/null
l-wx------ 1 userX domain^users 64 Oct 20 17:57 1 -> /dev/null
l-wx------ 1 userX domain^users 64 Oct 20 17:57 2 -> /home/local/groupX/userX/.xsession-errors
lr-x------ 1 userX domain^users 64 Oct 20 17:58 255 -> /home/local/groupX/userX/Desktop/loop_executor.sh*
lr-x------ 1 userX domain^users 64 Oct 20 17:57 3 -> pipe:[225812]

FD 3은 "파이프라인"을 가리킵니다. 글쎄, 나는 스크립트에서 해당 파일을 하드코딩한 사람이기 때문에 그것이 사용하는 파일을 알고 있지만 가능하다면 다른 소스에서 이 정보를 얻고 싶습니다(내 스크립트는 단지 POC이므로 프로세스일 수 있습니다). 누구의 코드가 나에게 공개되지 않았는지).

내 이해는 그것이 pipe:[225812]내 파일의 inode를 가리키지 않는다는 것입니다.

ll -i /tmp/console_test 
16519395 prw-r--r-- 1 userX domain^users 0 Oct 20 18:14 /tmp/console_test|

그래서 내 질문은: 프로세스가 파이프(내 시스템의 파일)를 열 수 있는 경우 이 파이프가 "해당"하는 파일을 확인할 수 있습니까?

중요한 경우 우분투 12.04를 사용하고 있습니다.

[편집하다]cat내 파이프에서 읽는 프로세스를 찾아보세요 . 상위 프로세스와 동일한 개방형 파이프를 가지므로 여기에는 큰 차이가 없습니다. -> pipe:[225812]파일이 있는 경우 파일을 보는 것만으로는 여전히 알 수 없습니다.

답변1

귀하의 스크립트는 /tmp/console_test아직 열려 있지 않지만 cat프로세스는 열려 있습니다. 귀하의 스크립트는 프로세스에 연결된 파이프에서 데이터를 읽고 있습니다 cat. 이것이 질문에 표시되는 것입니다.

프로세스를 검색하여 cat프로세스를 확인하세요.

아마도 다음과 같은 것을 원할 것입니다.

while read x; do
    echo "received $x"
    eval "$x"
done < /tmp/console_test

매개변수 주위에 추가된 따옴표에 유의하세요.eval

관련 정보