반응형
가끔 스스로 내가 현재 백그라운드 실행인지, 포그라운드 실행인지를 체크해야 하는 경우가 발생한다.
이때 유용하게 사용할 수 있는 것이 바로 os.getpgrp()를 통해 현재 프로세스의 그룹과 제어 터미털의 값이 같으면 포그라운드라고 볼 수 있으며, stdout 파일 핸들을 실패하면 프로세스가 백그라운드에서 실행되고 있다고 알 수 있다.
파일 핸들을 얻을 때 예외로 실패되기 때문에 try/except으로 처리를 해줘야 한다.
import os
import sys
def main():
try:
if os.getpgrp() == os.tcgetpgrp(sys.stdout.fileno()):
print 'Running in foreground.'
else:
print 'Running in background.'
except Exception:
print 'Running in background.'
if __name__ == '__main__':
main()
이 확인을 보다 원활하게 하기 위해서는 아래와 같이 함수를 만들어 처리는 하는 것도 좋은 방법이다.
def is_background():
try:
is_background = os.getpgrp() != os.tcgetpgrp(sys.stdout.fileno())
except io.UnsupportedOperation:
# 화면 출력 관련 stdout 의 fileno 예외 발생시 백그라운드 실행으로 볼 수 있다.
is_background = True
except OSError as err:
if err.errno == errno.ENOTTY:
# 터미널이 없는 경우에도 백그라운드 실행으로 볼 수 있다.
is_background = True
else:
raise
return is_background
반응형
'Python' 카테고리의 다른 글
Python - Http Retry 및 while 을 통한 재시도하기 (0) | 2024.03.03 |
---|---|
Python - string 문자열 원하는 구분자 기준으로 나누기 (0) | 2024.03.03 |
VSCode Error - Sorry, something went wrong activating IntelliCode support for Python. Please check the "Python" and "VS IntelliCode" output windows for details. (0) | 2024.03.03 |
VSCode - Pylint로 Python 코드 퀄리티 올리기 (0) | 2024.03.03 |
Python - Boto3 S3 대량 데이터 가져오기, paginator (0) | 2024.03.03 |