Um processo suspenso pode ser copiado?

1

Se eu suspender um trabalho em execução no bash usando ctrl-z existe uma maneira de copiá-lo. Então agora tenho dois processos iguais.

Eu estou executando um script python que carrega vários arquivos e faz algumas análises sobre eles, em seguida, atinge um estágio interativo que eu quero executar alguns testes nos dados analisados. A ideia é que a análise inicial que leva 20 minutos ou mais pode ser feita uma vez e, em seguida, o estágio interativo pode ser testado a partir do zero várias vezes.

    
por user1750289 19.02.2015 / 11:48

3 respostas

3

Há uma ferramenta chamada cryopid que permite a captura instantânea de um processo em execução para que você possa retomá-lo mais tarde. Eu não tentei, mas não vejo razão para que você não possa "retomar" o processo de instantâneo enquanto o original ainda está em execução. Como comentário de terdon sugerido, há muitas < a href="https://github.com/maaziz/cryopid/blob/master/TODO"> coisas a considerar quando snapshotting um processo, então cryopid pode ser mimado; A melhor solução no seu caso seria modificar o processo original para que ele armazene a análise uma vez concluída e carregue-a em execuções futuras.

    
por 19.02.2015 / 20:01
0

Você deve conseguir pegá-lo com o jobs -command:

➜  ~  top
[1]  + 55990 suspended  top
➜  ~  jobs -l
[1]  + 55990 suspended  top
    
por 19.02.2015 / 11:52
0

Eu acho que provavelmente você está procurando como listar os arquivos no diretório /proc/$pid/ do processo em que você está interessado (pelo menos, este seria o caso em uma máquina linux) . Dentro desse diretório, você pode encontrar praticamente todas as informações necessárias para duplicar / emular o estado de um processo dentro de outro.

Você deve prestar muita atenção nos grupos de processos, na montagem de sinalizadores de propagação, na afinidade, nas páginas sujas, nas páginas abreviadas, nos memmaps, nos deslocamentos fd, em cgroups , status , ns/* , fd/* , oom* , io , cmdline , environ , maps e ... bem, preste muita atenção.

De qualquer forma, desde que as permissões corretas, você pode listar todos esses arquivos como ...

ls -R /proc/"${pid_of_interest}"/

Se você construir seu kernel 3.3+ com a opção CONFIG_CHECKPOINT_RESTORE , o kernel também irá preencher um diretório /proc/$pid/mem_files/ para você, que conterá um link simbólico (ala /proc/$pid/fd/* ) para cada mmap() 'd arquiva o processo atualmente reivindicado - e também qualquer um que compartilhe com qualquer outro processo.

    
por 20.02.2015 / 07:43

Tags