서브셸 및 관련 명령을 백그라운드에 배치하는 방법은 무엇입니까?

서브셸 및 관련 명령을 백그라운드에 배치하는 방법은 무엇입니까?

다음과 같이 서브셸에서 일련의 명령을 실행합니다.

(git pull;git rebase develop)&>/dev/null 

나는 이것이 생성된 하위 쉘과 하위 프로세스를 백그라운드에 두고 사용자에게 제어권을 반환한다고 생각합니다.

그러나 실제로는 터미널이 잠시 정지되어 서브셸의 명령이 완료되기를 기다리는 것처럼 보입니다.

그렇다면 왜 이런 일이 일어나고 그러한 일을 수행하는 올바른 방법이 무엇인지 설명할 수 있는 사람이 있습니까?

답변1

bash셸을 실행하는 경우 표준 출력 및 오류 스트림을 (와 동일 ) &>/dev/null로 리디렉션 하지만 하위 셸을 비동기 프로세스로 실행 하지는 않습니다 . 이렇게 하려면 마지막에 추가 콘텐츠를 추가해야 합니다./dev/null>/dev/null 2>&1( ... )&

(git pull; git rebase develop) &>/dev/null &

ksh93그러한 기능은 없으며 POSIX에서는 사용할 수 없습니다.

답변2

sleep케이스에 추가하고 &명령 끝에 추가하여 백그라운드에 놓을 수 있습니다.

(git pull; sleep 3; git rebase develop) &>/dev/null &

아니면 다음을 사용할 수 있습니다.

for cmd in $commands
do
    "$cmd" &
done
wait

&명령 끝에 있는 명령은 명령을 백그라운드에서 실행하고 백그라운드 wait작업이 완료될 때까지 기다립니다.

관련 정보