나는 하드코딩된 파이프에서 수신된 문자를 수신하고 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