Como parar um processo Linux para execução posterior trocando sua memória


19

Desejo interromper um processo demorado, para que ele não consuma recursos de CPU ou memória física, com a intenção de retomar o mesmo processo no futuro.

Sei que a parte da CPU é possível de usar SIGSTOPe SIGCONT sinais, mas é possível sair da página (trocar no caso de páginas sujas do processo) imediatamente a memória RSS privada de um processo (parado)?


1
Qual é a intenção por trás disso? Deseja garantir que o processo seja retomado mais rapidamente? Ou você deseja impedir que dados confidenciais sejam gravados no disco? Ou alguma outra coisa? Se conhecermos a intenção, poderemos dar melhores respostas.
Oliver

13
O sistema operacional fará isso automaticamente. Realmente não há razão para fazer algo específico.
21716 David Schwartz

@oliver Estou criando um agendador em lote ( github.com/brutusin/wava ). A implementação atual oferece agendamento não preventivo, mas quero passar para um preventivo (capaz de interromper a execução de trabalhos) para evitar graciosamente algumas situações de conflito quando todos os trabalhos em execução dependem de trabalhos na fila. Eu preciso exatamente o comportamento perguntou, continuando processos (não criando novos de um posto de controle) parou
idelvall

1
@DavidSchwartz que é uma afirmação arriscada
idelvall

@idelvall Parece que você não quer fazer nada de especial na memória.
22416 David Schwartz

Respostas:


11

Você pode procurar uma técnica chamada ponto de verificação / restauração. Isso permitirá que você execute um processo em execução e salve seu estado em um conjunto de arquivos e depois restaure-o posteriormente.
Para usá-lo, comece instalando o programa criu [ git , wiki ] ( yum install criuou apt install criu).

Para verificar um processo em execução, crie um diretório vazio para armazenar seus arquivos e cd nesse diretório.

mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint

Agora verifique o processo em execução. Nesse caso, estou usando o --shell-job, pois tenho meu processo em execução em um shell com um tty associado.

criu dump -t 404 --shell-job

404 é o pid do processo que eu quero checar. Quando faço isso, vejo meu processo em execução ser morto e meu diretório / var / tmp / checkpoint é preenchido com um conjunto de arquivos necessários para restaurá-lo.

Para restaurar o processo, verifique se estou no diretório com os arquivos do ponto de verificação e faço uma restauração.

cd /var/tmp/checkpoint
criu restore --shell-job

O processo continuará de onde parou no terminal onde foi executado. Se eu matar esse processo em execução e executar criu restore --shell-jobnovamente, o processo retornará ao ponto de verificação e será iniciado novamente.

Espero que isto ajude.


4
Isso não faz o que o OP afirma que eles querem fazer. Experimente - não haverá redução na memória usada. Apenas mudará da memória privada do processo para o cache do disco (devido à gravação do conjunto de arquivos). Apenas faz uma etapa extra de salvamento e uma etapa extra de restauração, e a mesma memória é usada (e ejetável) da mesma maneira. De fato, isso pode piorar as coisas à medida que alguma memória é duplicada devido à geração de tudo novo para escrever.
David Schwartz

heh, bom ponto @ David, especialmente se /tmpfor tmpfs (suportado por memória / espaço de troca). Se você apontar para um sistema de arquivos normal suportado por disco, poderá usar vmtouch -epara remover as páginas do pagecache, mas ele ainda usará RAM extra temporariamente. (A menos que criutem uma opção para fazer Direct I / O (com O_DIRECT) ...)
Peter Cordes

1
É difícil saber se é isso que o OP quer ou não, porque pede uma solução específica em vez de explicar que problema ele está tentando resolver. Esta pode ser a resposta perfeita ou pode ser inútil para ele, não podemos dizer.
David Schwartz

Eu não olhei para ele em detalhes ainda, mas, parece que o processo restaurado é um novo processo (PID diferente), e isso não é exatamente o que eu preciso ...
idelvall

1
@idelvall: É assim que a maioria dos tipos de ponto de verificação / restauração funciona. Um dos principais casos de uso é salvar o progresso de um cálculo nas reinicializações.
Peter Cordes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.