Como posso aplicar -v depois de já ter executado um comando?

Como posso aplicar -v depois de já ter executado um comando?

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 -vopçã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 topcomando e os processos que usam mais CPU aparecerão no topo. Se estiver funcionando, drushprovavelmente 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.hallentã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 ddprocesso USR1faz 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 ddprocesso.

informação relacionada