백그라운드 프로세스란 무엇입니까?

백그라운드 프로세스란 무엇입니까?

다음은 백그라운드 프로세스의 일반적인 정의입니다.

"백그라운드 프로세스는 사용자 입력 없이 실행되는 프로그램입니다. 사용자가 포그라운드 프로세스와 상호 작용할 때 멀티태스킹 운영 체제(예: Linux)에서 여러 백그라운드 프로세스가 실행될 수 있습니다. 일부 백그라운드 프로세스(예: 데몬)는 다음과 같은 용도로 사용됩니다. 사용자 입력이 전혀 필요하지 않습니다. 사용자가 현재 포그라운드에서 실행 중인 프로그램으로 바쁜 동안 다른 프로세스는 일시적으로만 백그라운드에 있으므로 다른 프로세스는 활성화될 때까지 잠자고 스왑 공간을 차지하여 현재 프로세스로 만듭니다. 배경."

이 정의가 주어지면 apache2와 같은 프로세스는 터미널의 사용자 입력과 상호 작용하지 않기 때문에 백그라운드 프로세스가 되지 않을까요? 시스템에서 실행되는 대부분의 프로세스가 터미널에서 사용자 입력을 처리하지 않기 때문에 대부분의 프로세스 백그라운드 프로세스를 고려하지 않습니까? 이상하게도 저는 개인적으로 apache2를 백그라운드 프로세스로 생각하지 않습니다. 왜냐하면 사용자가 http 요청(단지 터미널이 아님)을 통해 apache2와 상호 작용하기 때문입니다.

답변1

"데몬"에는 일반적인 정의와 정확한 UNIX 특정 정의라는 두 가지 일반적인 정의가 있습니다.

광범위하게 말하면 콘솔에 앉아 있는 사용자와 상호 작용하지 않는 모든 프로세스를 "백그라운드 프로세스"라고 부를 수 있습니다. 이런 의미에서 Apache는 백그라운드 프로세스입니다.

유닉스 용어에서 "백그라운드 프로세스"는 정확한 정의를 갖습니다. ㅏ백스테이지 과정터미널에서 시작되었지만 현재 터미널과의 상호 작용이 금지된 프로세스입니다. (프로세스 그룹을 고려하지 않음으로써 단순화하고 있습니다.) 일반적으로 셸에서 백그라운드 작업을 시작하여 백그라운드 프로세스를 얻습니다.

$ myprogram &
[1] 12345
$ 

또는 프로그램을 시작한 다음 일시 중지하고 백그라운드에서 계속 실행되도록 합니다.

$ myprogram
^Z
[1]+ Stopped    myprogram
$ bg
[1]+ myprogram &
$ 

가 없는 프로그램을 시작하면 &포그라운드에서 실행됩니다. 포그라운드에는 하나의 프로세스만 있을 수 있습니다.특정 터미널에서한 번. (또는 더 일반적으로는 포그라운드 프로세스가 일부 하위 프로세스를 시작하는 경우 단일 프로세스 그룹입니다.) 쉘 내장 명령은 bgfg그라운드에 있는 프로세스를 변경합니다. 프로세스가 백그라운드에 있을 때 터미널에 읽거나 쓰려고 하면SIGTTIN 또는 SIGTTOUT 신호에 의해 중지됨.

Apache는 HTTP를 통해 사용자와 상호 작용하기 때문에 백그라운드 프로세스가 아니라는 직관을 발견했습니다. Apache는 사용자와 상호 작용하지 않습니다. 즉, 원격 웹 브라우저(사용자와 상호 작용) 또는 자동화 클라이언트(사용자와 상호 작용하지 않음)와 상호 작용합니다. 대화형 프로세스와 상호 작용하는 모든 프로세스를 대화형 프로세스로 간주하면 모든 프로세스는 대화형이므로 쓸모 없는 개념이 됩니다.

인용한 정의는 백그라운드 프로세스를 유휴 프로세스와 통합합니다. 백그라운드 프로세스가 포그라운드 프로세스보다 더 많은 시간을 절전 모드로 전환하거나 교체할 이유가 없습니다. 예를 들어, 백그라운드 프로세스가 일부 무거운 계산을 수행할 수 있습니다. 반대로, 사용자가 콘솔을 떠나고 다른 활성 프로세스가 있는 경우 포그라운드 프로세스가 교체될 수 있습니다.

답변2

포그라운드 프로세스에는 사용자 상호 작용이 필요하지 않습니다. 넌 할 수있어

cp very_large_file destination

복사가 완료될 때까지 터미널이 차단되며 사용자 상호 작용 없이 포그라운드 프로세스로 처리됩니다. 여기서 중요한 점은 프로세스가조각종료될 때까지 다른 프로세스를 실행합니다.

포그라운드 프로세스를 백그라운드 프로세스로 전환하는 방법에는 두 가지가 있습니다.

&1- 명령줄 끝에 앰퍼샌드( )를 추가합니다.

cp very_large_file destination &

2- 포그라운드 프로세스를 중지하고 백그라운드에 넣습니다.

cp very_large_file destination

CTRL+Z

bg

이제 apache2확실히 백그라운드 프로세스로 간주됩니다. 예, http 요청을 통해 상호 작용할 수 있지만 이러한 요청을 기다리는 포트 80(기본적으로)만 수신합니다. 사용자가 요청할 때까지 시스템을 차단하지 않습니다.

대부분의 프로세스가 백그라운드 프로세스로 간주되는 데 문제를 제기하는 이유는 무엇입니까? 이는 "멀티태스킹 운영 체제"에서는 실제로 정상적인 현상입니다.

관련 정보