2012-02-15 1 views
0

tty2에서 시작된 프로세스의 tty1에서 PID를 가져 오는 방법은 무엇입니까?bash lsof : 한 tty에서 다른 tty로 pid 가져 오기

컨텍스트 :
이 파일이 미리 정의 된 최대 크기를 초과하면 파일을 생성하는 프로세스를 중단시키기위한 배쉬 원 라이너를 작성하려고합니다. (한 줄 짜기는 아직 작동하지 않고 루프에 끼워 넣어야합니다.)

테스트 중에 포인트는 tty2에 명령이 실행되는 tid2에도 불구하고 lsof은 터미널 tty1의 PID를 반환하지 않습니다.

tty1로 : 파일 및 모니터링을 생성하는 변경

MAX_SIZE_Ko=10001;file=test_lsof;dd if=/dev/zero of=$file bs=1k count=800;inotifywait $file;SIZE_Ko=$(du -s $file | cut -f1); [[ "$SIZE_Ko" -gt "$MAX_SIZE" ]] && (PID=$(lsof $file | tail -n1 | awk -F" " '{ print $2 }') ; [[ ! -z $PID ]] && kill -9 $PID || echo "no running PID modifying $file") 

에서 tty2 : 파일 크기를 증가

for ((1; 1; 1));do echo -e "foobar\n" >> test_lsof; echo $((i++))" - pid="$$; done 
+0

tty2 프로세스를 제어 할 수 있습니까? 그렇다면 프로세스 PID를 첫 번째 프로세스에서 검색 할 수있는 방식으로 저장하는 것이 좋습니다. 예를 들어 'test_lsof.pid'에 쓰는 것이 좋습니다. 대답은 –

답변

1

다른 답변에서 언급했듯이 파일은 잠시 동안 만 열리기 때문에 파일을 잡는 데 드는 확률이 낮습니다.

그러나, 당신은 변경할 수 있습니다 :이 고급 쉘 리디렉션을 사용

exec 5>test_lsof 
for ((1; 1; 1)); do 
    echo -e "foobar\n" >&5 
    echo $((i++))" - pid="$$ 
done 

- 간부 인 줄은> & 5는 파일 기술자에 대한 명령의 출력을 리디렉션, 파일 기술자를 엽니 다.

이렇게하면 lsof에서 셸을 볼 수 있습니다.

+0

물론 그렇습니다. Thx,이 트릭은 고급 리디렉션을 사용하기 때문에이 맨 팁을 exec 매뉴얼 페이지에서 찾을 수 없었습니다. 나는 그 방법을 조사 할 것이다. 좋은 생각, 힌트를 위해 다시 thx. – hornetbzz

1

문제에서 tty2의 처리 만 분할 제를 추가하기위한 파일을 여는 것이다 문자열. 똑같은 초 단위로 lsof를 실행하지 않는다면, 그것을 잡지 못할 것입니다.

이 문제를 해결하는 한 가지 방법은 inotify-tools을 사용하는 것입니다. 프로그램 inotifywait을 사용하면 파일이 열리고 실행이 lsof이 될 때까지 기다릴 수 있습니다. inotifywait $file; lsof $file.

+0

입니다.하지만 추한 tty1 한 줄 짜기를 읽는다면, inotifywait는 이미 제가 사용하고있는 명령입니다. – hornetbzz

+0

오, 미안하다. 나는 그것을 놓쳤다. inotifywait 직후 lsof 부분을 이동해보십시오. –

+0

그리고 lsof는 또한 inotify 후에 꽤 똑바로 서 있습니다. – hornetbzz

관련 문제