백그라운드에서 무한 루프를 실행하는 방법

백그라운드에서 무한 루프를 실행하는 방법

스크립트를 계속 실행하는 동안 백그라운드에서 무한 루프를 실행하려면 어떻게 해야 합니까?

"스크립트" 예:

while true; do something_in_the_background; done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0

이 (참고 &)는 잠시 후 전체 시스템이 충돌하는 것 같습니다.

while true; do
  something_in_the_background &
done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0

답변1

루프 내부에서는 &백그라운드에서 새 프로세스를 시작하고 첫 번째 프로세스가 끝날 때까지 기다리지 않고 가능한 한 빨리 다시 실행합니다. 대신에 루프를 배경에 넣고 싶다고 생각하므로 &루프 자체에 다음과 같이 하십시오.

while /bin/true; do
    something_in_the_background
done &

# more stuff

답변2

while : ; do something ; done &
  • true초기 Bourne 쉘에는 및 false내장 명령이 없었습니다 . true대신에 간단히 alias :false같은 것을 사용하세요 let 0.

  • &라인 끝의 프로세스를 배경으로 합니다.

  • :"help:"에 설명된 대로 빈 명령입니다.No effect; the command does nothing. Exit Status: Always succeeds.

답변3

절전 시간을 0.1초 또는 0.01초로 설정하면 루프가 CPU 친화적이 됩니다. 그러나 Eric Renouf가 지적했듯이 &는 루프 내부가 아닌 루프의 끝에 있어야 합니다.

관련 정보