Como obter o comando executado de um processo que foi concluído com sucesso usando o PID?

2

Eu tenho um script pequeno, abc.ksh, que recebe 3 parâmetros Por exemplo, abc.ksh $ {a} $ {b} $ {c}

Eu vou ler um arquivo de configuração com 'n' no de entires e vou executar abc.ksh 'n' vezes em paralelo usando um loop for. Por exemplo,

export pids=()
for file in 'cat config.txt'
do
    a='echo ${file}|awk -F"|" '{ print $1 }''
    b='echo ${file}|awk -F"|" '{ print $2 }''
    c='echo ${file}|awk -F"|" '{ print $3 }''   
    nohup ksh abc.ksh ${a} ${b} ${c} &
    pids+=("$!")
done

Em seguida, preciso verificar a conclusão de cada trabalho (com base no pid) e executar o próximo item de ação para esse trabalho específico. Por exemplo,

export cnt=0
while[ $cnt -eq 'wc -l config.txt']; do
  export tmp=()
  for p in ${pids[*]}; do
    if[[ ! -d /proc/${p} ]]; then
      wait ${p}
      echo "Process completed with Process ID ${p}; exit code: $?"
      if [[ $? -eq 0 ]]; then
        cnt='expr $cnt + 1'
        ***<Need to get the executed command "
        nohup ksh abc.ksh {a} {b} {c}" for the successfully completed PID>.***
      else      
    else
      echo "Process with Process ID ${p} Still running."
      tmp+=("${p}")
  done
  pids+=( ${tmp[*]})
done

Como posso conseguir isso?

    
por Dipto Mukherjee 13.05.2016 / 21:41

1 resposta

0

Não comentarei muito sobre a estrutura ou o conteúdo do script além de notar que você está colocando os PIDs no array pids de maneira sequencial.

Você espera que esses mesmos PIDs sejam o mesmo pedido.

Isso significa que o comando que você espera na etapa n do loop estará usando os parâmetros na linha n de config.txt .

A única coisa que causaria problemas são suas incursões no sistema de arquivos /proc . Isso não é necessário. Você também precisa verificar a condição no loop externo ( $cnt não será igual ao número de linhas no arquivo config.txt na primeira iteração, por exemplo).

    
por 22.09.2017 / 00:39