Следующий тестовый скрипт имеет проблему. Когда я добавляю строку (sleep 5 ) &
в сценарий, тогда цикл "пока читается" не читает все строки из файла, а только печатает первую строку.
Но когда я удаляю ( sleep 5 ) &
из скрипта, тогда скрипт печатает все строки, как определено в файле.
Почему ( sleep 5 ) &
вызывает это?
И как решить проблему? Я хочу создать новый процесс (для которого sleep
является лишь примером) в цикле while:
$ more test
#!/bin/ksh
while read -r line ; do
echo Read a line:
echo $line
( sleep 5 )&
RESULT=$!
echo Started background sleep with process id $RESULT
sleep 1
echo Slept for a second
kill $RESULT
echo Killed background sleep with process id $RESULT
done < file
echo Completed
На моем Linux, когда используется следующее содержимое file
:
$ more file
123 aaa
234 bbb
556 ccc
... работает ./test
просто дает мне:
Read a line: 123 aaa Started background sleep with process id 4181 Slept for a second Killed background sleep with process id 4181 Completed