Como criar um novo processo em segundo plano em um loop KSH “while read”?

0

O seguinte script de teste tem um problema. Quando eu adiciono a linha (sleep 5 ) & no script, o loop "while read" não lê todas as linhas do arquivo, mas apenas imprime a primeira linha.

Mas quando eu removo o ( sleep 5 ) & do script, o script imprime todas as linhas, conforme definido no arquivo.

Por que o ( sleep 5 ) & faz isso?

E como resolver o problema? Eu quero criar um novo processo (para o qual o sleep é apenas um exemplo) no loop 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 

No meu Linux, ao usar o seguinte conteúdo de file :

$ more file 
123 aaa 
234 bbb 
556 ccc

... executar ./test apenas me dá:

Read a line:
123 aaa
Started background sleep with process id 4181
Slept for a second 
Killed background sleep with process id 4181
Completed
    
por yael 20.06.2010 / 15:42

1 resposta

1

Do changelog do Ksh para o ksh93s:

06-10-23 A bug in which the value of $! was affected by a background job started from a subshell has been fixed.

Se a sua versão do ksh for mais antiga que essa (você deve mencionar a versão da sua pergunta!), você pode estar observando este bug.

    
por 25.07.2011 / 15:43

Tags