Comando de atraso do Linux até depois de um processo mais antigo ser concluído

0

Gostaria de poder iniciar um comando agora, mas ele deve ser iniciado somente depois que um comando mais antigo (que já está em execução) for concluído.

Por exemplo, digamos que estou copiando um arquivo grande na rede, uma ação que já satura minha largura de banda de rede. Eu então quero copiar um segundo arquivo grande e menos importante para o mesmo destino, mas para que a primeira cópia termine o mais rápido possível, eu gostaria de atrasar essa segunda cópia até depois da primeira conclusão.

Normalmente eu faria isso:

10 minutos atrás:
cp large_file_urgent ~/networkmnt/
Tempo atual:
sleep <some_guesstimated_time_for_old_cp_to_finish> && cp large_file_lessimportant ~/networkmnt

Existe uma maneira mais inteligente de fazer isso? Posso de alguma forma dizer ao segundo cp para esperar até que o primeiro PID cp termine?

Isso está no Ubuntu 13.04 (no caso de alguma consequência).

    
por danns87 15.05.2014 / 20:58

3 respostas

4

Se você souber antecipadamente os comandos que precisa executar, basta fazer

cp file1 file2; cp file3 file4

Se você já iniciou o primeiro comando, e você está no mesmo shell, você pode pressionar Ctrl + Z , então bg para colocar o primeiro comando em segundo plano e, em seguida, chamar wait no número do trabalho ou no PID para aguardar até que termine . Por exemplo:

$ sleep 30
^Z
[1]+  Stopped                 sleep 30
$ bg
[1]+ sleep 30 &
$ wait %1; echo "next command"
[1]+  Done                    sleep 30
next command
    
por 15.05.2014 / 22:10
1

Você pode verificar se o processo ainda está em execução usando o sistema de arquivos /proc :

while test -d /proc/$cp_pid; do
  sleep 10
done 
cp next_big_file network
    
por 15.05.2014 / 21:11
1
cp largefile1 somedestination

... o tempo ... passa ...

wait $(pidof cp)
cp largefile2 someplace

O bash builtin wait, fará uma pausa até que o job / processo especificado (ou todos os trabalhos, se não forem especificados) tenha sido concluído antes de continuar.

    
por 16.05.2014 / 00:35