pid가 주어지면 모든 파일을 열어 다음과 같이 작성할 수 있습니다.
lsof -p 28827 | awk '$4 ~ "[wW]"{print $(NF-1), $NF}'
그 중 하나는 결국 파이프가 됩니다.
28827 232611 pipe
이 파이프로 열린 모든 파일을 찾고 싶습니다. 내가 이렇게 하면:
lsof | grep 232611
이는 나에게 여러 프로세스를 제공하며 그 중 하나는 다음과 같습니다 tee
.
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
<app> 28827 <me> 1w FIFO 0,8 0t0 232611 pipe
<app> 28827 28836 <me> 1w FIFO 0,8 0t0 232611 pipe
<app> 28827 28901 <me> 1w FIFO 0,8 0t0 232611 pipe
....
tee 28828 <me> 0r FIFO 0,8 0t0 232611 pipe
프로그래밍 방식으로(또는 일반적으로 액세스 가능한 프로세스) 어떻게 찾나요 PID
? 열이 아닌 대부분의 행에 대해 간단히 확인할 수는 없습니다.tee
r
$4 ~ "r"
$4
FD
답변1
단순히 숫자 뒤에 하나 이상의 s가 오는 것으로 충분합니다 r
.
lsof | grep -P '\b\d+r+\b'
또는 GNU grep이 없는 경우:
lsof | grep -E '\b[0-9]+r+\b'
s는 \b
단어 경계를 표시하고 전체 필드만 일치하는지 확인합니다. 또는 grep이 지원하는 경우 다음 -w
플래그를 사용할 수 있습니다.
lsof | grep -wE '[0-9]+r+'
따라서 이것을 사용하면 관련 PID를 얻을 수 있습니다
lsof | grep -wE '[0-9]+r+' a | awk '{print $2}'
@derobert는 아래 주석에서 2562행을 실제로 읽는 데 시간이 걸리면 인쇄할 필드를 선택할 수 있는 옵션이 man lsof
제공된다는 점을 지적했습니다 . -F
파일의 액세스 유형을 얻으려면 다음을 사용하십시오 a
.
lsof -p 28827 -F a