![서브셸 및 관련 명령을 백그라운드에 배치하는 방법은 무엇입니까?](https://linux55.com/image/93581/%EC%84%9C%EB%B8%8C%EC%85%B8%20%EB%B0%8F%20%EA%B4%80%EB%A0%A8%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EC%97%90%20%EB%B0%B0%EC%B9%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같이 서브셸에서 일련의 명령을 실행합니다.
(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
작업이 완료될 때까지 기다립니다.