백그라운드에서 애플리케이션을 실행하면 어떤 이점이 있는지 잘 모르겠습니다. 명령줄을 통한 것과
같은 것입니다 .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 신호로 인해 프로세스가 종료되지 않고 백그라운드에서 안전하게 실행되도록 하는 것입니다.
SIGHUP이 하위 프로세스(bg 작업)로 전송되는 것을 방지하는 것도 huponexit
bash 셸의 옵션을 설정하여 방지할 수 있습니다.
$ shopt -s huponexit
이 옵션은 최신 버전의 Bash에서 기본적으로 설정되어 있지만, 설정되어 있지 않은 경우 이를 추가하여 ~/.bashrc
기본 동작으로 만들 수 있습니다.
답변2
복사 작업과 같이 종료까지 5분이 소요되는 애플리케이션을 실행하는 경우 프로그램이 실행되는 동안 전체 5분 동안 셸이 차단됩니다. 그런 다음 복사 작업은 로그인 으로 표시되는 소위 포그라운드 프로세스 그룹에 속하게 +
됩니다 ps
. 5분 동안 다른 작업을 수행해야 할 수도 있지만 셸이 차단되었습니다.
반면, 백그라운드( cp source target &
)에서 복사 작업을 실행하면 현재 셸을 차단하지 않고 백그라운드에서 작업이 실행됩니다. 다른 작업을 계속할 수 있습니다. fg
원하는 경우 프로세스를 다시 전경으로 가져올 수 있습니다 .