스크립트를 계속 실행하는 동안 백그라운드에서 무한 루프를 실행하려면 어떻게 해야 합니까?
"스크립트" 예:
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가 지적했듯이 &는 루프 내부가 아닌 루프의 끝에 있어야 합니다.