pid를 재귀적으로 사용하여 쓰기 위해 모든 파일 열기

pid를 재귀적으로 사용하여 쓰기 위해 모든 파일 열기

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? 열이 아닌 대부분의 행에 대해 간단히 확인할 수는 없습니다.teer$4 ~ "r"$4FD

답변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 

관련 정보