como saber o status de um comando?

1

Como saber se o comando anterior foi realizado com sucesso ou não.

Sei que uma maneira é usar o comando echo $? :

[username@hostname ~]$ echo $?
0

Mas e quanto a um cenário como este: digamos que eu queira executar um script python chamado "ROSE_main.py"

[username@hostname rose]$ python ROSE_main.py -g HG18 -i HG18_MM1S_MED1.gff -r MM1S_MED1.hg18.bwt.sorted.bam -c MM1S_WCE.hg18.bwt.sorted.bam -o example -s 12500 -t 2500
USING HG18_MM1S_MED1.gff AS THE INPUT GFF
USING HG18 AS THE GENOME
MAKING START DICT
LOADING IN GFF REGIONS
CHECKING INPUT TO MAKE SURE EACH REGION HAS A UNIQUE IDENTIFIER
REFERENCE COLLECTION PASSES QC
STITCHING REGIONS TOGETHER
PERFORMING REGION STITCHING
REMOVED 7865 LOCI BECAUSE THEY WERE CONTAINED BY A TSS

...

O comando parece ser executado como sempre. Quando eu usei o comando "top" em um novo toque, aqui está o que eu vejo:

   315 root      RT   0     0    0    0 S 100.0  0.0   1801:10 migration/104                                                                                                                    
    42 root      RT   0     0    0    0 S 100.0  0.0   2023:48 migration/13                                                                                                                     
   177 root      RT   0     0    0    0 S 100.0  0.0   1622:39 migration/58                                                                                                                     
    51 root      RT   0     0    0    0 S 100.0  0.0   1820:09 migration/16                                                                                                                     
    66 root      RT   0     0    0    0 R 100.0  0.0   2135:56 migration/21                                                                                                                     
   462 root      RT   0     0    0    0 R 100.0  0.0   1696:18 migration/153                                                                                                                    
    63 root      RT   0     0    0    0 S 100.0  0.0   1735:34 migration/20                                                                                                                     
    54 root      RT   0     0    0    0 S 100.0  0.0   1844:20 migration/17                                                                                                                     
   429 root      RT   0     0    0    0 S 100.0  0.0   1690:33 migration/142                                                                                                                    
 11471 gdm       20   0  374m  12m 4544 R 117.1  0.0 934:51.45 gnome-settings-                                                                                                                  
   318 root      RT   0     0    0    0 S 100.0  0.0   1774:44 migration/105 

Eu acho que se o comando ainda estiver sendo executado ativamente, eu deveria ser capaz de ver meu nome de usuário e algo como "python", mas em vez disso, eu não vi nada parecido.

Quando cheguei ao comando, toque, o cursor estava sempre piscando, então o comando ainda está sendo executado, como poderia ser isso?

Como eu poderia saber se o comando ainda está em execução?

O comando

top não me deu nenhuma informação. Eu não poderia usar echo $? (se eu tentasse inserir echo $? , Receberei algum feedback, como pipeline broken )

    
por Jun 02.05.2016 / 11:42

1 resposta

2

Se o comando morrer, você obterá o prompt do shell de volta, com ou sem uma mensagem de erro.

Assim, em qualquer caso, ainda está em execução. Mas no seu caso, parece estar aguardando a entrada do terminal. Isso geralmente significa que nunca terminará , a menos que você forneça a entrada que está aguardando.

Em qualquer caso, top não é a ferramenta certa. Destina-se a mostrar os principais processos - aqueles que usam a maioria da CPU, a maior parte da memória, etc. - e seu comando não é necessariamente um dos processos com maior classificação em qualquer categoria que top ordena.

A ferramenta apropriada para ver o status de um comando é ps . Você pode usar ps para mostrar todos os processos no sistema (com -e ), apenas seus próprios processos (ou de um usuário específico) (com -U ) ou processos específicos. Outros parâmetros para ps estão definindo seu formato. Então, no seu caso, você poderia usar

ps -lf $(pgrep python)

Para ver todos os processos cujo comando head é python .

O -lf fornece muitas informações sobre cada um desses processos - entre eles, o estado do processo (na coluna S ) e, se estiver atualmente suspenso em vez de em execução, a chamada do sistema foi interrompida. ( WCHAN ).

Se o comando estiver em execução, em vez de esperar, você verá R na coluna S e - na coluna WCHAN . Se estiver aguardando algo, você verá S na coluna S e algo como wait_w , poll_s , futex_ etc. na coluna WCHAN .

É difícil dizer exatamente o que se está esperando, mas se você perceber que ele permanece nesse estado por muito tempo e espera que ele comece a ser executado, verifique o próprio comando para ver se ele foi executado corretamente .

Leia o manual ps para obter mais detalhes sobre os possíveis formatos e o que você pode ver em sua saída.

E quanto ao seu comando python, você deve verificar por que ele está aguardando a entrada do usuário.

    
por 02.05.2016 / 12:09

Tags