
Gostaria de observar o progresso de um comando que sei que levará cerca de seis horas. Executei um script de atualização e esqueci de usar -v (ou o que quer que eu deveria ter feito para "observar" o progresso), então não tenho como saber até que ponto o processo está.
Caso seja aplicável, o comando que usei foi:
drush cvupdb
Para atualizar uma instalação do CiviCRM, mas esta questão não se aplica especificamente ao CiviCRM. A resposta pode ser aplicada universalmente a qualquer processo já em execução. Eu teria adicionado esta pergunta como um comentário a postagens muito semelhantes, mas ainda não tenho reputação suficiente, então precisei iniciar um novo tópico. Obrigado!
Responder1
Se você tiver o código-fonte do programa, poderá dar uma olhada no que a -v
opção faz. Muitas vezes simplesmente define uma variável chamada verbose, algo como:
int verbose=0
while ((opt = getopt(argc, argv, "v")) != -1) {
switch (opt) {
case 'v':
verbose= 1;
break;
Nesse caso, e se o programa contiver informações de depuração (tabela de símbolos), é possível anexar um depurador ao processo em execução e definir a variável adequadamente:
gdb -p <pid>
n
n
...
set variable verbose=1
c
Responder2
Resposta curta: você não pode fazer isso em geral.
Para o seu problema específico, para verificar se está fazendo alguma coisa, use top
. Basta executar o top
comando e os processos que usam mais CPU aparecerão no topo. Se estiver funcionando, drush
provavelmente deve estar perto do topo.
Responder3
Geralmente, a primeira coisa que um comando ou script faz é ler os parâmetros, portanto, resposta curta, não. E mesmo que o programa fizesse algum trabalho de configuração e depois lesse os parâmetros, você precisaria hackear a memória de um processo em execução.
Então, para responder à pergunta se o processo está em execução, na linha de comando, assumindo que seu ID de usuário usado para executar o processo é c.hall
então
ps -fu c.hall
O que listará todos os processos em execução sob esse ID de usuário. Agora, se o processo iniciar um processo daemon, será mais complicado, mas isso deve ser suficiente para você começar.
Responder4
Como indicado emA resposta de Mark Stewart, em geral não há como alterar os parâmetros de um comando após iniciá-lo.
Em alguns casos, porém, é possível determinar externamente o progresso de um processo. Por exemplo, enviar um sinal a um dd
processo USR1
faz com que ele imprima seu progresso e continue:
kill -USR1 $(pgrep dd)
Para processos que leem ou gravam arquivos, você pode usarprogress
(somente no Linux) para rastrear o quanto eles são lidos ou gravados e talvez ter uma ideia do tempo restante - pelo menos, você verá se o processo ainda está fazendo alguma coisa:
progress -m -c dd
monitoraria um dd
processo.