Linux에서 백그라운드로 실행할 수 있는 것은 무엇입니까?

Linux에서 백그라운드로 실행할 수 있는 것은 무엇입니까?

특히 &를 사용하여 호출하면 bash 스크립트의 함수 호출이 백그라운드에서 실행됩니까?

해결책을 강구하려고 노력 중이에요여러 파일 소유자 변경다음과 같은 것이 효과가 있을 것이라고 생각했습니다. 그러나 user_searcher() 함수 호출이 실제로 백그라운드에서 실행됩니까?

  1 #!/bin/bash
  2 
  3 User1=1000
  4 User2=1001
  5 User3=1002
  6 
  7 user_searcher()
  8 {
  9         for fil in `find $HOME -uid $ooser -type f`
 10         do
 11                 chown "NEWUSER$1" $fil
 12         done
 13 }
 14 
 15 PIDARRAY=()
 16 let i=1
 17 for ooser in $User1 $User2 $User3 ;
 18 do
 19         let i++
 20         user_searcher ooser i &
 21         PIDARRAY+=("$!")
 22 done    
 23 
 24 wait ${PIDARRAY[@]}

답변1

man bash (작업 제어 참조)

&는 제어 연산자로, 제어 기능을 수행한다는 의미입니다.

명령이 제어 연산자 &에 의해 종료되면 쉘은 서브쉘의 백그라운드에서 명령을 실행합니다.

(서브쉘에는 PID 프로세스 ID 번호가 할당됩니다)

간단히 말해서, &로 명령을 종료하면 명령을 실행하기 위한 하위 쉘 프로세스가 생성되어 모든 명령이 백그라운드에서 실행되도록 지시할 수 있습니다.

대략적으로 말하면, 쉘에서 독립적으로 실행될 수 있다면 서브쉘에서도 백그라운드로 실행될 수 있습니다( &무엇을 하는지). 만약 그것이라면충분히서브쉘에서 일련의 명령 또는 완전한 명령(함수)을 실행한 다음 백그라운드에서 실행할 수 있습니다... 여기서는 수정될 수도 있지만 포그라운드에서 쉘을 실행할 수 있다면 쉽게 말할 수 있습니다. 변수의 범위가 다양하고 사용자 정의 가능한 백그라운드 실행입니다( coprocvs &와 ​​비교를 참조하세요 lastpipe. 그러나 변수의 범위는 명령이 서브셸에서 실행되고 있기 때문이 아니라 서브셸에서 실행되는 명령의 결과입니다). 배경).

명령이란 무엇입니까?

~에서울위치 카니발 가이드:

BASH는 입력(보통 터미널이나 파일)에서 명령을 읽습니다. 읽는 각 입력 줄은 명령, 즉 실행될 명령으로 처리됩니다. (나중에 설명할 여러 줄에 걸쳐 있는 명령과 같은 일부 고급 사례가 있습니다.) Bash는 각 줄을 공백 문자(공백 및 탭)로 구분된 단어로 나눕니다. 줄의 첫 번째 단어는 실행할 명령의 이름입니다. 나머지 모든 단어는 명령에 대한 인수(옵션, 파일 이름 등)가 됩니다.

bash-doc-3.2의 aosa-bash-full.pdf배쉬 소스 코드:

"간단한" 쉘 명령은... 명령 이름(예: echo 또는 cd)과 0개 이상의 인수 및 리디렉션 목록으로 구성됩니다. (47페이지)

셸 함수와 셸 스크립트는 명령 집합의 이름을 지정하고 다른 명령과 마찬가지로 해당 명령 집합을 실행하는 방법입니다. 셸 함수는 특수 구문을 사용하여 선언되고 동일한 셸 컨텍스트에서 저장 및 실행됩니다. 셸 스크립트는 파일에 명령을 배치하고 이를 해석하기 위해 셸의 새 인스턴스를 실행하여 생성됩니다. 셸 함수는 이를 호출하는 셸과 대부분의 실행 컨텍스트를 공유하지만, 셸 스크립트는 새로운 셸 호출로 해석되므로 환경의 프로세스 간에 전달되는 내용만 공유합니다. (48페이지)

.........

Bash는 기본적으로 하나 이상의 프로세스에서 실행되는 명령인 작업 개념을 도입했습니다. 예를 들어 파이프는 파이프의 각 요소에 대해 하나의 프로세스를 사용합니다. 프로세스 그룹은 개별 프로세스를 단일 작업으로 연결하는 방법입니다. 터미널에는 연관된 프로세스 그룹 ID가 있으므로 전경 프로세스 그룹은 터미널 프로세스 그룹 ID와 동일한 프로세스 그룹입니다. (69페이지)

  • 모든 프로세스가 백그라운드에서 실행 가능
  • 쉘 자체가 하나의 프로세스이다
  • 셸의 모든 지시문/명령(여전히 느슨하게 정의됨)은 &에 의해 생성된 하위 셸에서 실행하여 백그라운드에서 실행할 수 있습니다.

가장 큰 고려 사항은 백그라운드 하위 쉘 프로세스가 상위 프로세스와 상호 작용하는 방식입니다. 다시 man bash의 작업 제어를 참조하세요.

관련 정보