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

0

Gostaria de ver o progresso de um comando que sei que levará cerca de seis horas. Eu executei um script de atualização e esqueci de usar -v (ou o que eu deveria ter feito para "observar" o progresso), então não tenho como saber a que distância o processo está.

Caso se aplique, o comando que usei foi:

drush cvupdb

Para atualizar uma instalação do CiviCRM, mas esta questão não se aplica ao CiviCRM especificamente. A resposta pode ser aplicada universalmente a qualquer processo já em execução. Eu teria adicionado essa pergunta como um comentário para posts muito semelhantes, mas eu não tenho reputação suficiente ainda, então eu precisava começar um novo tópico. Obrigado!

    
por Christia 04.11.2016 / 22:42

4 respostas

2

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 comando top e os processos que usam mais CPU aparecerão no topo. Se estiver funcionando, drush provavelmente deve estar perto do topo.

    
por 04.11.2016 / 23:17
3

Se você tiver o código-fonte do programa, pode dar uma olhada no que a opção -v 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 apropriadamente:

gdb -p <pid>
n
n
...
set variable verbose=1
c
    
por 04.11.2016 / 23:28
1

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.

Assim, para responder à pergunta se o processo está sendo executado, na linha de comando, supondo que seu ID de usuário usado para executar o processo seja c.hall then

ps -fu c.hall

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.

    
por 04.11.2016 / 22:53
1

Como indicado na resposta de Mark Stewart , em geral não há como alterar os parâmetros de um comando depois de iniciá-lo.

Em alguns casos, é possível determinar o progresso de um processo externamente. Por exemplo, o envio de um sinal dd a USR1 faz com que ele imprima seu progresso e continue:

kill -USR1 $(pgrep dd)

Para processos que lêem ou escrevem arquivos, você pode usar progress (somente no Linux) para rastrear o quanto eles ' leia ou escreva, e talvez tenha uma ideia do tempo restante - pelo menos, você verá se o processo ainda está fazendo alguma coisa:

progress -m -c dd

monitoraria um processo dd .

    
por 04.11.2016 / 23:08