如何知道命令的状态?

如何知道命令的状态?

如何判断之前的命令是否成功执行。

我知道一种方法是使用echo $?命令:

[username@hostname ~]$ echo $?
0

但是像这样的场景呢:假设我想运行一个名为“ROSE_main.py”的 python 脚本

[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

...

该命令似乎永远被执行。当我在新水龙头中使用“top”命令时,我看到的是:

   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 

我想如果命令仍在运行,我应该能够看到我的用户名和类似“python”之类的东西,但是,我没有看到任何类似的东西。

当我来到命令点击时,光标一直在闪烁,所以命令仍在执行,怎么可能?

我如何知道该命令是否仍在运行?

top命令没有给我任何信息。我也不能使用echo $?(如果我尝试输入echo $?,我会得到一些反馈,例如pipeline broken

答案1

如果命令失败,您将返回 shell 提示符,无论是否有错误消息。

所以无论如何,它仍然在运行。但就你而言,它似乎正在等待来自终端的输入。这通常意味着它将永远不会结束,除非你给它它正在等待的输入。

无论如何,top都不是正确的工具。它旨在显示排名靠前的进程 - 或者是使用最多 CPU、最多内存等的进程 - 并且您的命令不一定是在排序top依据的任何类别中排名最高的进程之一。

查看命令状态的正确工具是ps.您可以使用ps显示系统中的所有进程(使用-e)、仅显示您自己(或特定用户)的进程(使用-U)或特定进程。其他参数ps定义其格式。所以在你的情况下你可以使用

ps -lf $(pgrep python)

查看头命令为 的所有进程python

-lf为您提供了有关每个此类进程的大量信息 - 其中包括进程的状态(在列下S),如果它当前正在睡眠而不是运行,则系统调用它已停止的位置(WCHAN)。

如果该命令正在运行,而不是等待,您会R在该S列中看到 ,并-在该WCHAN列中看到。如果它正在等待某些内容,您会S在该S列中看到 ,以及类似wait_wpoll_sfutex_的内容WCHAN

很难确切地说出它在等待什么,但是如果您发现它长时间处于该状态并且您期望它开始运行,则应该检查命令本身以查看是否正确运行了它。

阅读ps手册以获取有关可能的格式以及您可以在其输出中看到的内容的更多详细信息。

至于你的 python 命令,你应该检查它为什么等待用户输入。

相关内容