AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 502065
Accepted
Sollosa
Sollosa
Asked: 2019-02-22 04:22:56 +0800 CST2019-02-22 04:22:56 +0800 CST 2019-02-22 04:22:56 +0800 CST

Existe uma maneira de pausar um processo em execução em sistemas Linux e retomar mais tarde?

  • 772

Eu tenho que copiar arquivos em uma máquina. E os dados são imensamente grandes. Agora os servidores precisam servir normalmente, e geralmente há um intervalo específico de horas ocupadas neles. Então, existe uma maneira de executar esses comandos de uma maneira que, se o servidor atingir o horário de pico, ele pausará o processo e, quando sair desse intervalo, o retomará?

Resultado pretendido

cp src dst

if time between 9:00-14:00 pause process
After 14:00 resume cp command.
process process-management
  • 6 6 respostas
  • 17560 Views

6 respostas

  • Voted
  1. filbranden
    2019-02-22T04:48:47+08:002019-02-22T04:48:47+08:00

    Você pode pausar a execução de um processo enviando um SIGSTOPsinal e depois retomá-lo enviando um arquivo SIGCONT.

    Supondo que sua carga de trabalho seja um único processo (não fork helpers em execução em segundo plano), você pode usar algo assim:

    # start copy in background, store pid
    cp src dst &
    echo "$!" >/var/run/bigcopy.pid
    

    Então, quando o horário de pico começar, envie um SIGSTOP:

    # pause execution of bigcopy
    kill -STOP "$(cat /var/run/bigcopy.pid)"
    

    Mais tarde, quando o servidor estiver ocioso novamente, retome-o.

    # resume execution of bigcopy
    kill -CONT "$(cat /var/run/bigcopy.pid)"
    

    Você precisará agendar isso para horários específicos em que deseja que seja executado, você pode usar ferramentas como cron ou systemd timers (ou uma variedade de outras ferramentas semelhantes) para agendar isso. Em vez de agendar com base em um intervalo de tempo, você pode optar por monitorar o servidor (talvez observando a média de carga, o uso da CPU ou a atividade dos logs do servidor) para decidir quando pausar/retomar a cópia.

    Você também precisa gerenciar o arquivo PID (se você usar um), certifique-se de que sua cópia ainda esteja em execução antes de pausá-la, provavelmente você desejará limpar removendo o arquivo PID assim que a cópia estiver concluída, etc.

    Em outras palavras, você precisa de mais em torno disso para tornar um processo confiável, mas a ideia básica de usar esses SIGSTOPe SIGCONTsinais para pausar/retomar a execução de um processo parece ser o que você está procurando.

    • 83
  2. Stéphane Chazelas
    2019-02-22T06:23:21+08:002019-02-22T06:23:21+08:00

    Em vez de suspender o processo, você também pode dar prioridade mais baixa:

    renice 19 "$pid"
    

    dará a ele a prioridade mais baixa (a mais alta gentileza), para que o processo ceda a CPU para outros processos que precisam dela na maior parte do tempo.

    No Linux, o mesmo pode ser feito com E/S com ionice:

    ionice -c idle -p "$pid"
    

    Colocará o processo na classe "idle", de modo que ele só terá tempo de disco quando nenhum outro programa tiver solicitado E/S de disco por um período de carência definido .

    • 79
  3. Best Answer
    gerhard d.
    2019-02-22T04:46:01+08:002019-02-22T04:46:01+08:00

    Sim, você precisa adquirir o ID do processo para pausar (através do pscomando), então faça:

    $> kill -SIGSTOP <pid>
    

    O processo aparecerá com o Status "T" (em ps).

    Para continuar, faça um:

    $> kill -CONT <pid>
    
    • 13
  4. Anton Tománek
    2019-02-23T05:44:49+08:002019-02-23T05:44:49+08:00

    Use rsync, esqueça o cp, para este cenário. existem parâmetros para limitar a largura de banda, ou podem ser mortos/parados e iniciados mais tarde, de uma forma que continuará, de onde deixou o google rsync example/s

    • 8
  5. Bill K
    2019-02-22T15:17:21+08:002019-02-22T15:17:21+08:00

    Se você vai fazer isso interrompendo o processo em execução, sugiro jogar com o programa Screen. Eu não uso o Linux há algum tempo, mas o IIRC apenas pausar o comando e retomá-lo mais tarde deixa você bastante vulnerável, se você for desconectado acidentalmente, não poderá retomar sua sessão.

    Com a tela acredito que você possa interromper a sessão, desanexá-la e sair. Mais tarde, você pode voltar e reconectar a essa sessão. Você teria que brincar um pouco com isso, mas tornou as sessões muito mais robustas.

    Você também pode sair e ir para casa, fazer login remotamente, reconectar-se ao sistema que você iniciou no escritório e retomá-lo à noite e, em seguida, recuperá-lo no dia seguinte no trabalho.

    • 3
  6. ave
    2019-02-26T03:23:18+08:002019-02-26T03:23:18+08:00

    Se o seu shell suportar (quase todos o fazem), você pode pressionar ^Z (Ctrl+Z) para enviar facilmente um SIGTSTPsinal para a tarefa de primeiro plano e continuar com fg(em primeiro plano) ou bg(em segundo plano).

    Se você fizer isso em várias tarefas e quiser retornar a elas mais tarde, poderá usar jobso comando e retornar com fg/bg %#, onde # é o número fornecido entre colchetes nas tarefas.

    Lembre-se de que SIGTSTPé um pouco diferente de SIGSTOP(que é usado em todas as outras respostas), principalmente devido ao fato de que pode ser ignorado (mas não vi um programa ignorá-lo além de sl). Mais detalhes podem ser encontrados nesta resposta no StackOverflow .

    • 1

relate perguntas

  • Como obter os IDs dos grupos suplementares de um processo?

  • O que `/proc/irq/.../spurious` contém?

  • Um processo pai pode alterar o ambiente de seu filho?

  • Como 'ejetar' obtém processos para fechar identificadores de arquivo?

  • O que acontece com uma sessão unix quando o líder da sessão sai?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve