현재 다른 프로세스에서 파일을 쓰고 있는지 스크립트에서 어떻게 확인할 수 있나요?

현재 다른 프로세스에서 파일을 쓰고 있는지 스크립트에서 어떻게 확인할 수 있나요?

나는 bash 스크립팅을 처음 접했기 때문에 잘못된 트리를 짖을 수도 있지만 현재 상황은 다음과 같습니다.

스크립트에서 시작합니다.사무실; 변환하다odtPDF

것 같다사무실스크립트 프로세스에서 분리되어 자신의 일을 하기 위해 떠돌아다닙니다. 좋아요, 괜찮습니다. GUI 앱은 그런 경향이 있습니다.

하지만 새 버전이 나올 때까지 기다려야 합니다.PDF다음 단계는 새로운 내용을 처리하는 것이므로 완전히 작성되었습니다.PDF.

(내가 아는 한) 스크립트가 시작되기 전에 이미 실행 중인 프로세스였을 수 있으므로 soffice의 프로세스 ID를 활용할 수 없습니다.사무실관련 없는 다른 문서/프레젠테이션/스프레드시트에 대한 일반적인 GUI 활동을 위해 이미 열려 있을 수 있습니다.

나에게 있어 문제의 핵심은 내가 계속 진행하기 전에 새로운 글을 작성해야 한다는 것입니다.PDF마무리해야 합니다...

파일이 언제 있는지 확인하는 방법이 있나요?더이상"쓰기" 모드에서 다른 프로세스를 열까요? ...

답변1

lsof | grep /absolute/path/to/file.txt파일이 열려 있는지 확인하는 데 사용할 수 있습니다 . 파일이 열려 있으면 이 명령은 상태 0을 반환하고 그렇지 않으면 256(1)을 반환합니다.

일반적으로 언제든지 많은 파일이 열려 있으므로 이 명령은 몇 초 정도 걸립니다.

lsof -c gedit예를 들어 를 사용하여 gedit가 어떤 파일을 열었는지 확인할 수도 있습니다 . 출력을 하나의 프로세스로 제한하면 실행 시간이 사실상 전혀 줄어들지 않습니다.

기다릴 스크립트는 다음과 같습니다.

#!/bin/bash

while :
do
    if ! [[ `lsof -c python3.2 | grep test.py` ]]
    then
        break
    fi
    sleep 0.5
done
echo "done"

이는 'pyhton3.2' 프로세스가 'test.py' 파일을 연 동안 실행됩니다. 파일이 닫히자마자 '에코 완료' 상태로 이동하여 종료됩니다.

루프가 CPU를 심하게 잡아먹지 않도록 거기에 'sleep 0.5'를 넣었습니다. 그렇지 않으면 CPU를 100% 사용하게 됩니다.

보너스 odt를 pdf로 변환하는 쉬운 방법이 있는 것 같습니다.

이 멋진 팁을 제공한 OOo 포럼의 scls19fr에게 감사드립니다. unoconv -f pdf input.odtunoconv를 얻으려면 sudo apt-get install unoconv터미널에서 실행하기만 하면 명령줄에서 OpenOffice Writer 파일을 PDF로 변환할 수 있습니다 .(rhyshale.wordpress.com의 운율)

관련 정보