C에서 "백그라운드 모드"로 호출 된 프로그램을 탐지하는 방법은 무엇입니까? 대화 형 또는 백그라운드에서 실행하려는 프로그램이 있습니다.백그라운드 작업 감지
stdin에서 읽지 말고 "Stopped : tty input"상태로 끝내지 말아야합니까?
stdin이 닫혀 있는지 테스트해야합니까? 어떻게해야합니까?
편집 : isatty는 좋은 생각 인 것 같습니다. 그러나 stdin이 파이프 끝이고 tty가 아닌 경우 어떻게됩니까?
C에서 "백그라운드 모드"로 호출 된 프로그램을 탐지하는 방법은 무엇입니까? 대화 형 또는 백그라운드에서 실행하려는 프로그램이 있습니다.백그라운드 작업 감지
stdin에서 읽지 말고 "Stopped : tty input"상태로 끝내지 말아야합니까?
stdin이 닫혀 있는지 테스트해야합니까? 어떻게해야합니까?
편집 : isatty는 좋은 생각 인 것 같습니다. 그러나 stdin이 파이프 끝이고 tty가 아닌 경우 어떻게됩니까?
사용 제어 단말의 파일 디스크립터에 tcgetpgrp()
함수 (예 STDIN_FILENO
0 현재 진행중인 프로세스 그룹이 자신의 프로세스 그룹과 같은지 확인하십시오 (getpgrp()
). 그러나 포 그라운드 프로세스 그룹은 프로그램이 포 그라운드와 백그라운드로 이동함에 따라 언제든지 변경 될 수 있습니다. 예를 들어 tcgetpgrp()
으로 전화를 걸고 테스트하기 전에 즉시 변경 될 수 있습니다. 이것에 기초하여 어떤 행동을 취하려고한다면 이것을 명심하십시오; SIGTTIN
을 피할 수있는 확실한 방법은 아닙니다.
#include <unistd.h>
pid_t fg = tcgetpgrp(STDIN_FILENO);
if (fg == -1) {
/* stdin is not controlling terminal (e.g. file, pipe, etc.) */
} else if (fg == getpgrp()) {
/* foreground */
} else {
/* background */
}
1) stdin이 열려 있는지 확인하고 닫으면/dev/null을 열어야합니다.
2) isatty
을 사용할 수있는 "수익 1 DESC 터미널 0 연결된 개방형 파일 기술자이면 그렇지 않으면"