백그라운드에서(ctrl+z를 통해) 정지된 애플리케이션을 계속 실행해야 합니까, 아니면 실행을 중지해야 합니까?

백그라운드에서(ctrl+z를 통해) 정지된 애플리케이션을 계속 실행해야 합니까, 아니면 실행을 중지해야 합니까?

명령을 사용하여 Firefox를 실행하면 xinit /path/to/firefox/binaryFirefox가 실행 중임을 보여주는 창이 열립니다.

Ctrl그런 다음 +를 눌러 콘솔로 돌아가고 Alt+ 를 눌러 Firefox를 백그라운드에서 일시 중지합니다.F1Ctrlz

그런 다음 ++를 눌러 CtrlFirefox로 돌아갑니다. Firefox가 정지되거나 응답하지 않을 것으로 예상했지만 여전히 문제 없이 Firefox를 사용할 수 있습니다. 내 기대치는 다른 앱을 백그라운드로 보낼 때의 경험을 바탕으로 합니다. 예를 들어 백그라운드로 보낼 때 다운로드 프로세스가 중지됩니다.AltF7wgetwget

왜 이런 일이 발생합니까?

답변1

터미널에서 Firefox를 실행하면 Firefox는 백그라운드로 들어가 터미널에서 분리됩니다. 따라서 Ctrl+를 눌러도 ZFirefox가 실제로 일시 중지되지는 않습니다 xinit.

wget그리고 대부분의 명령줄 프로그램에는 이러한 분리된 동작이 없습니다. GUI 기반 프로그램(예: geditFirefox 실행 및 분리)은 대부분 이와 같이 작동합니다.


이런 일이 발생하는 것을 방지할 수 있는 몇 가지 옵션이 있는지 살펴보았습니다. -foreground가능한 옵션 이름처럼 보이지만 이것은 단지 Firefox 창을 전경으로 밀어넣을 뿐입니다.

답변2

Ctrl+를 누르면 Z응용 프로그램이 일시 중지되고 이와 같이 fgSIGCONT를 사용하여 다시 시작될 때까지 실행이 중지됩니다(아마도 셸에서 또는 명령을 통해 전송됨). bg하지만…

당신은 달리고 있습니다 . xinit아니죠 firefox. Ctrl+를 누르면 Z이미 실행 중인 다른 응용 프로그램이 아닌 포그라운드에서 실행 중인 응용 프로그램에 STOP 신호를 보냅니다. 따라서 xinitX11 세션에는 영향을 미치지 않는 자신을 일시 중단하는 것입니다.

좀 더 정확하게 말하면 Ctrl+를 누르면 Z프런트에 STOP 신호가 전송됩니다.프로세스 그룹. 여기에는 여러 프로세스가 포함될 수 있지만 프로세스 그룹의 목적은 윤리적으로 신호 전달 목적으로 단일 단위로 유지되는 것입니다.

Ctrl( + C및 SIGINT, Ctrl+ 및 SIGQUIT 에도 동일하게 적용됩니다 \. 반면에 터미널이 사라지면 SIGHUP은 단일 프로세스, 즉 세션 리더, 일반적으로 셸에만 전송됩니다. 쉘은 차례로 자신이 시작하는 작업에 SIGHUP을 보냅니다. )

xinitX 서버와 클라이언트를 자체 프로세스 그룹에서 실행하면 전체 세션을 종료하지 않고도 일시 중단하거나 종료할 수 있습니다. 잡을 수 있는 신호를 보내면 X 서버가 종료되고 이로 인해 대부분의 X 응용 프로그램이 종료됩니다. 따라서 Ctrl+를 누르면 CGUI 세션이 닫히지만 간접적으로 닫히지는 않습니다. 모든 클라이언트에 대해 닫히지는 않습니다. 클라이언트와 서버 모두 SIGINT를 수신했습니다. 반면 에 Ctrl+ 에서는 특정 작업이 수행되지 않으므로 세션이 일시 중지 되고 유지되므로 실행 중인 터미널에서 다른 작업을 수행하려는 경우 유용합니다 .CxinitCtrlZxinitxinit

관련 정보