Processos bifurcados e variáveis compartilhadas

1

Eu tenho um script bash com duas funções bifurcadas, todas gravando em um log. Quando ambos tiverem terminado, gostaria de excluir este log.

O problema que estou tendo, é que processFinishCount nunca é maior que um. Cada processo bifurcado captura uma cópia da variável compartilhada e incrementa essa cópia quando chama delete_log ?

Como posso garantir que a variável seja incrementada corretamente?

processFinishCount=0

delete_log()
{
    let processFinishCount++
    if ["$processFinishCount" == 2]; then
        rm log.txt

    else
        echo '$processFinishCount task(s) finished" >> log.txt
    fi
}

function_one()
{
    ...
    delete_log
}
function_two()
{
    ...
    delete_log
}

function_one &
function_two &
    
por James Webster 13.09.2013 / 11:49

2 respostas

0

A variável global em um processo não será atualizada no outro. Daí um arquivo externo poderia ser usado. Eu terei algo assim (não verificado quanto à precisão).

delete_log()
{
    touch /tmp/$1
    if [ -e $status_file1 -a -e $status_file2 ]
    then 
        rm log.txt
    else
        echo log >> log.txt
    fi
}

f1()
{
    ...
    delete_log $1
}

f2()
{
    ...
    delete_log $1
}

f1 fork1.done &
f2 fork2.done &
    
por 13.09.2013 / 19:36
-1

Você pode usar wait para aguardar a conclusão de todos os processos filhos. Isso imprime a após 3 segundos:

sleep 3 &
sleep 1 &
wait
echo a

help wait :

wait: wait [id]
    Wait for job completion and return exit status.

    Waits for the process identified by ID, which may be a process ID or a
    job specification, and reports its termination status.  If ID is not
    given, waits for all currently active child processes, and the return
    status is zero.  If ID is a a job specification, waits for all processes
    in the job's pipeline.

    Exit Status:
    Returns the status of ID; fails if ID is invalid or an invalid option is
    given.
    
por 13.09.2013 / 12:47