백그라운드에서 앱을 실행하면 어떤 이점이 있는지 잘 모르겠습니다. 명령줄을 통해서와 같습니다
.Application &
도대체 왜 백그라운드에서 앱을 실행합니까? 언제 이 일을 하기로 결정해야 합니까?
답변1
일반적으로 실행하는 데 시간이 너무 오래 걸리고 사용자 상호 작용이 필요하지 않은 애플리케이션은 터미널에서 계속 작업할 수 있도록 백그라운드로 전송됩니다.
백그라운드에서 실행되는 작업은 STDOUT, STDIN 및 STDERR이 다르다는 점을 제외하면 포그라운드에서 실행되는 작업과 동일하게 처리됩니다.
파일 압축이나 백업 등 시간이 오래 걸리는 작업이 있는 경우 해당 작업을 백그라운드로 보낼 수 있습니다.
jobs
명령을 사용하여 백그라운드에서 실행 중인 작업을 나열할 수 있습니다.
$ ./job1.sh &
[1] 9747
$ ./job2.sh &
[2] 9749
$ ./job3.sh &
[3] 9751
$ jobs
[1] Running ./job1.sh &
[2]- Running ./job2.sh &
[3]+ Running ./job3.sh &
작업이 백그라운드 셸로 전송될 때마다 프로세스 합계가 여기에 표시됩니다 job id
. pid
프로세스를 전경으로 되돌리려면 fg
명령을 사용하여 프로세스를 재개할 수 있습니다.
$ fg 1
./job1.sh
하지만 터미널(셸)을 닫으면 SIGHUP이 셸에서 생성된 모든 백그라운드 프로세스로 전송되어 해당 프로세스가 종료된다는 점에 유의하세요. 이를 방지하려면 disown
명령을 사용하여 작업 테이블에서 이러한 프로세스를 제거하여 프로세스가 종료되는 것을 방지할 수 있습니다.
nohup
가장 좋은 방법 중 하나는 SIGHUP 신호가 프로세스를 종료하지 않고 백그라운드에서 안전하게 실행되도록 명령을 사용하여 백그라운드 프로세스를 시작하는 것입니다 .
huponexit
bash 셸에서 옵션을 설정하여 SIGHUP이 하위 프로세스(bg 작업)로 전송되는 것을 방지할 수도 있습니다.
$ shopt -s huponexit
이 옵션은 최신 버전의 Bash에서 기본적으로 설정되어 있지만, 설정되어 있지 않은 경우 이 옵션을 추가하여 ~/.bashrc
기본 동작으로 만들 수 있습니다.
답변2
복제 작업과 같이 완료하는 데 5분이 걸리는 응용 프로그램을 실행하면 프로그램이 실행되는 동안 셸이 5분 동안 차단됩니다. 그런 다음 복제 작업은 login 으로 +
표시되는 소위 포그라운드 프로세스 그룹에 배치됩니다 ps
. 5분 동안 다른 작업을 수행해야 할 수도 있지만 셸이 차단되었습니다.
반면, cp source target &
백그라운드()에서 복사 작업을 실행하면 현재 셸을 차단하지 않고 백그라운드에서 작업이 실행됩니다. 다른 일로 넘어갈 수 있습니다. fg
원하는 경우 프로세스를 다시 전경으로 가져올 수 있습니다.