Linux의 / proc에서 열린 파이프 쇼에 대한 자세한 정보를 얻으려면 어떻게해야합니까?


53

리눅스에서 /proc/<pid>/fd자주 파헤 치면 다음과 같은 출력이 나타납니다.

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

다른 쪽 프로세스와 같은 열린 파이프에 대한 자세한 정보는 어떻게 얻습니까?


lsof는 전체적으로 찾기 /proc가 느립니다. 더 효과적인 솔루션을 제공 할 수 있습니까?
pihentagy

답변:


46

다른 답변에 익숙하지만

lsof | grep 90222668

양쪽 끝이 '파이프 번호'를 공유하기 때문에 양쪽 끝을 표시합니다.


3
아 물론 이죠 예상대로 작동합니다. 출력의 4 번째 열을 보면 파일 설명자 번호와 판독기 및 기록기의 끝을 알 수 있습니다!
Kamil Kisiel

그 번호는 마운트 할 수없는 pipefs 파이프의 inode 번호 일 수 있습니다. 파일 이름 매핑에 inode를 얻는 방법을 찾고 있지만 이것이 가장 좋은 방법 일 수 있습니다. 그건 그렇고, 나는이 질문을 좋아합니다 :-)
Kyle Brandt

어떻게 든 이것은 나를 위해 작동하지 않습니다. 출력되는 것은 파이프 자체입니다.
Rui Marques

lsof를 표준 사용자로 실행하면 모든 프로세스의 정보를 제공하지 않을 수 있습니다. 일반적으로 모든 프로세스의 / proc / <pid> / fd 디렉토리를 루트가 아닌 사용자로 볼 수있는 권한이 없습니다.
Andre Holzner 2016 년

5
또한 lsof -n -P | grep 90222668불필요한 이름 조회를 피하여 속도를 높이는 데 사용할 수 있습니다.
Wodin

4

다른 프로세스가 어떤 프로세스인지 확인하는 유일한 방법은 / proc의 모든 프로세스를 반복하고 해당 파이프를 사용중인 프로세스를 확인하는 것입니다 (즉, 동일한 파이프 ID에 대한 / proc / pid / fd의 심볼릭 링크가있는).


팁 고마워. 이 문제를 자동화하는 한 가지 방법은 다음과 같습니다 ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID 두 번째는 당신에게 프로세스 ID 줄 것이다 동안 첫 번째 ls 명령은 파이프의 양쪽 끝의 파일 디스크립터를 인쇄합니다
주앙 코스타

2

내가 열린 파이프를 얻는 방법을 알고있는 대부분의 정보는

lsof|grep FIFO

여전히 그것의 한쪽 끝에 대해서만 이야기합니다.


그것은 / proc에서 신성하게 할 수있는 것과 거의 같습니다. 나는 lsof가 같은 위치에서 그것을 얻는다고 가정합니다.
Kamil Kisiel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.