본문 바로가기
Python

Python - 백그라운드/포그라운드 실행 유무 체크

by 올엠 2024. 3. 3.
반응형

가끔 스스로 내가 현재 백그라운드 실행인지, 포그라운드 실행인지를 체크해야 하는 경우가 발생한다.

이때 유용하게 사용할 수 있는 것이 바로 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

 

 

반응형