Как заставить систему ждать, пока скрипт внутри моего скрипта завершит свои фоновые процессы

Probablemente no sea una buena idea copiar bibliotecas aleatorias. En su lugar, inspeccione el sistema de paquetes para ver si se proporciona una versión de 32 -bits de la biblioteca. RedHat llama a 32 -bits "i686":

# yum whatprovides '*/libgobject-2.0.so.0' | grep i686
glib2-2.54.2-2.el7.i686 : A library of handy utility functions
# yum install glib2.i686
...

Puede ser una mejor idea evitar, si es posible, ejecutar un sistema multilib para reducir la complejidad y reducir las probabilidades de que se acumule yum en un problema de paquete multilib. Esto requeriría volver a compilar todo el software como 64 -bits.

1
04.07.2019, 20:42
1 ответ

Проблема в том, что вы отправляете процесс gatk в фоновый режим внутри подоболочки:( gatk... & ). Фоновый процесс не является дочерним элементом этой подоболочки, а не оболочки вашего скрипта, поэтому waitего не видит и не ждет. Изhelp wait:

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

    Waits for each process identified by an 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 job specification, waits for all processes
    in that job's pipeline.

Если вы измените это на фон всей подоболочки вместо этого (, т. е. ( gatk... ) &или, что еще лучше, вообще не используйте подоболочку, поскольку здесь она не делает ничего полезного, она будет работать, как и ожидалось:

for i in 1 2 3 4 5 6 7; do
  for o in A B D; do
    for u in _part1 _part2; do
      gatk HaplotypeCaller \
           -R /storage/ppl/wentao/GATK_R_index/genome.fa \
           -I GATK/MarkDuplicates/ApproachAsortedstettler.bam \
           -L chr$i$o$u \
           -O GATK/HaplotypeCaller/HaploSample.chr$i$o$u.raw.vcf &
    done
  done
done 
2
27.01.2020, 23:30

Теги

Похожие вопросы