백그라운드에서 프로세스를 실행한다는 것은 무엇을 의미합니까? [복사]

백그라운드에서 프로세스를 실행한다는 것은 무엇을 의미합니까? [복사]

백그라운드에서 프로세스를 실행한다는 것은 정확히 무엇을 의미합니까?

$program와 :의 차이점 $program&은 입력 파일 설명자가 셸에서 상속되지 않는다는 것입니까, 아니면 다른 것이 있습니까?

답변1

program &stdin은 여전히 ​​및 stdout과 동일 program하지만 일반적으로 (터미널 설정에 따라) 시스템이 신호를 통해 중지되지 않는 한 program &읽을 수 없습니다 (참조stdinSIGTTINhttps://en.wikipedia.org/wiki/Job_control_(Unix)#구현).

백그라운드 프로세스는 키보드 단축키( )로부터 신호를 받지 않으며 Ctrl-C, Ctrl-\, Ctrl-Z, 물론 백그라운드에서 프로세스를 실행하면 셸을 계속 사용할 수 있습니다(예: 다른 프로세스 시작).

답변2

이것은 많은 것을 의미합니다.

  1. 백그라운드 프로세스는 터미널을 차단하지 않습니다. 완료될 때까지 기다리지 않기 때문에 "비동기적으로" 실행됩니다. 강제로 연결을 끊으면 여전히 죽습니다.
  2. 따라서 응답은 반드시 "활성"이 아니라 "수동"일 필요가 있으며 나중에 검사하기 위해 출력을 파일로 리디렉션하는 것이 좋은 형식입니다.
  3. 배치 솔루션(명령 파일, 응답 파일 또는 예상)을 고려하지 않는 한 대화형 입력은 문제가 됩니다.
  4. "장기 실행" 작업의 경우 서비스로 시작하는 것을 고려할 수 있습니다.
  5. 배후에 문제가 있는 경우 tmux 및 screen을 참조하여 대안을 찾아보세요.

답변3

포그라운드에서 프로세스를 시작하면 쉘은 wait()다음 명령을 읽기 전에 프로세스가 완료될 때까지 기다립니다(일련의 시스템 호출 중 하나 사용). 백그라운드에서 프로세스를 시작하면 셸은 프로세스가 완료되거나 상태가 변경될 때까지 기다리지 않고 완료되거나 상태가 변경될 때까지 기다립니다. 다음 명령을 즉시 읽고 실행합니다.

당신이시작백그라운드 프로세스의 경우 원하는 대로 백그라운드와 전경 사이를 이동할 수 있습니다( ^Z및 사용 bg또는 사용 fg). 이 점에서 모든 직업은 동일합니다. 유일한 제한 사항은 주어진 시간에 최대 하나의 포그라운드 작업이 있을 수 있다는 것과 백그라운드 작업이 쉘의 tty를 사용하려고 하면 중지된다는 것입니다.

포그라운드 작업이 없을 때마다 쉘은 다음 명령(스크립트 파일 또는 표준 입력에서)을 읽고 실행합니다.

관련 정보