다음은 백그라운드 프로세스의 일반적인 정의입니다.
“백그라운드 프로세스는 사용자 입력없이 실행되는 프로그램입니다. A Linux와 같은 멀티 태스킹 운영 체제에서 수많은 백그라운드 프로세스를 실행할 수 있지만 사용자는 포 그라운드 프로세스와 상호 작용할 수 있습니다. 예를 들어 데몬과 같은 일부 백그라운드 프로세스는 사용자 입력이 필요하지 않습니다. 다른 프로세스는 일시적으로 백그라운드에 있습니다. 사용자는 현재 포 그라운드에서 실행중인 프로그램으로 바쁩니다. 다른 프로세스가 활성화 될 때까지 스왑 공간을 차지하고 잠자기 상태가 될 수 있으므로 현재 백그라운드 프로세스가됩니다. “
그 정의를 감안하면, apache2와 같은 프로세스가 터미널에서 사용자 입력과 상호 작용하지 않기 때문에 백그라운드 프로세스가되지 않겠습니까? 그리고 시스템에서 실행되는 대부분의 프로세스가 터미널에서 사용자 입력을 처리하지 않기 때문에 대부분의 프로세스 백그라운드 프로세스를 고려하지 않겠습니까? 이상하게도 사용자가 http 요청 (단지 터미널이 아님)을 통해 상호 작용하기 때문에 개인적으로 “apache2를 백그라운드 프로세스로 간주하지 않습니다.
댓글
- 여기에 두 가지 정의가 있다고 생각합니다. 하나는 사용자 입력 (프로세스가 터미널과 같은 사용자 입력을 받아 들일 수 있는지 여부)에 관한 것이고 다른 하나는 프로세스가 잠자고 있고 스왑 공간에 앉아 있는지 여부입니다. 여기에서 할 수 있습니다. 이 두 가지 모두를 백그라운드 프로세스라고 부르기 때문에 용어를 혼란스럽게 만듭니다.
답변
포 그라운드 프로세스는 그렇지 않습니다. 사용자 상호 작용이 필요합니다.
cp very_large_file destination
이렇게하면 복사가 완료 될 때까지 터미널이 차단되고 사용자 상호 작용이없는 포 그라운드 프로세스로 간주됩니다. 프로세스가 종료 될 때까지 다른 프로세스의 실행을 차단하는지 여부입니다.
두 가지 방법이 있습니다. 전경 과정을 만들다 백그라운드로 :
1- 명령 줄 끝에 앰퍼샌드 ( & ) 추가 :
cp very_large_file destination &
2- 포 그라운드 프로세스 중지 후 백그라운드로 가져 오기 :
cp very_large_file destination
CTRL + Z
bg
이제 apache2
는 확실히 다음과 같이 계산됩니다. 백그라운드 프로세스 : 예, http 요청을 통해 상호 작용할 수 있지만 포트 80 (기본적으로)에서 이러한 요청을 기다리고 있습니다. 사용자가 요청할 때까지 시스템을 차단하지 않습니다.
그리고 대부분의 프로세스가 백그라운드 프로세스로 간주되는 이유는 무엇입니까? 이것은 “멀티 태스킹 운영 체제”에서 실제로 정상적인 현상입니다.
댓글
- 호기심에서 차단하는 프로그램이 있지만 GNU 화면 세션 또는 tmux에서 실행 중이고 화면 / tmux 세션을 떠나 제어를 터미널로 되돌립니다 (물론 HUP (중단) 신호를 무시하므로 여전히 실행 중입니다), 배경으로 간주됩니다. 방법? 세션 내에서 기본 터미널에서 차단되지는 않지만 차단되고 있기 때문에 포 그라운드 프로세스라고 주장 할 수 있습니다.
- @JohnMerlino
screen
/tmux
는이 경우와 " 컨트롤을 터미널로 반환 할 때의 포 그라운드 프로세스입니다. " 백그라운드로 보냅니다.
답변
“백그라운드 프로세스”는 일반적인 용어로, 하나는 정확하고 유닉스에 고유합니다.
광범위한 의미에서 “백그라운드 프로세스”라고 할 수 있습니다. 이러한 의미에서 Apache는 백그라운드 프로세스입니다.
유닉스 용어에서 “백그라운드 프로세스”는 정확한 정의를 가지고 있습니다. 백그라운드 프로세스 는 터미널에서 시작되었지만 현재 터미널과의 상호 작용이 금지 된 프로세스입니다. 미네랄. (나는 프로세스 그룹을 고려하지 않음으로써 단순화합니다.) 일반적으로 셸에서 백그라운드 작업을 시작하여 백그라운드 프로세스를 얻습니다.
$ myprogram & [1] 12345 $
또는 프로그램을 중지 한 다음 백그라운드에서 계속 진행 :
$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $
&
없이 프로그램을 시작하는 경우 , 그것은 전경에 있습니다. 한 번에 지정된 터미널 의 포 그라운드에는 하나의 프로세스 만있을 수 있습니다. (또는 포 그라운드 프로세스가 일부 하위 프로세스를 시작하는 경우보다 일반적으로 단일 프로세스 그룹입니다.) 쉘 내장 bg
및 fg
는 어떤 프로세스를 변경합니다. 전경에 있습니다. 프로세스가 백그라운드에있을 때 터미널에 읽기 또는 쓰기를 시도하면 SIGTTIN 또는 SIGTTOUT 신호에 의해 중지됩니다 .
아파치는 HTTP를 통해 사용자와 상호 작용하기 때문에 아파치가 “백그라운드 프로세스가 아니라”는 직관을 발견했습니다. Apache는 사용자와 상호 작용하지 않습니다. 이는 원격 웹 브라우저 (사용자와 상호 작용) 또는 자동화 클라이언트 (사용자와 상호 작용하지 않음)와 상호 작용합니다. “대화 형 프로세스와 상호 작용하는 프로세스를 대화 형 프로세스로 간주하면 모든 프로세스는 대화 형이므로 쓸모없는 개념입니다.
당신이 인용 한 정의는 백그라운드 프로세스와 유휴 프로세스를 결합합니다.” 백그라운드 프로세스가 포 그라운드 프로세스보다 더 많이 잠자거나 스왑 아웃되는 이유가 없습니다. 예를 들어 백그라운드 프로세스는 무거운 계산을 수행 할 수 있습니다. 반대로 사용자가 콘솔에서 물러나고 다른 활성 프로세스가있는 경우 포 그라운드 프로세스가 교체 될 수 있습니다.