コマンドの状態をどのように知ることができますか?

コマンドの状態をどのように知ることができますか?

前のコマンドが正常に実行されたことを確認する方法です。

echo $?1つの方法は、次のコマンドを使用することです。

[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

コマンドが失敗した場合は、エラーメッセージとともにエラーメッセージなしでシェルプロンプトに戻ります。

とにかくまだ実行中です。しかし、あなたの場合は、端末からの入力を待っているようです。これは通常、次のことを意味します。決して終わらない、待っている入力を提供しない限り。

とにかくtop正しいツールではありません。これは、親プロセス(または最も多くのCPU、最も多くのメモリなどを使用するプロセス)を表示するためのものであり、命令がソートさtopれたカテゴリに関係なく、親プロセスの1つである必要はありません。

コマンドステータスを表示するための正しいツールは、システム内のすべてのプロセス(使用)、自分(または特定のユーザー)のプロセス(使用)、または特定のプロセスのみを表示するためにps使用できます。他のパラメータはその形式を定義します。したがって、あなたの場合に使用することができますps-e-Ups

ps -lf $(pgrep python)

ヘッダーコマンドが.であるすべてのプロセスを表示しますpython

これは、-lf各プロセスに関する多くの情報を提供します。その中にはプロセスステータス(列の下S)、プロセスが現在実行されていないスリープ状態の場合は停止したシステムコール(WCHAN)があります。

コマンドが実行されている場合は、待機せずにRそのS列と-そのWCHAN列に表示されます。何かを待っている場合は、そのS列にSなどが表示されますwait_wpoll_sfutex_WCHAN

何を待っているのか正確に言うのは難しいですが、長い間その状態を見つけて実行が開始されると予想される場合は、コマンド自体を確認して正しく実行されたことを確認する必要があります。

ps可能な形式と出力で見ることができるものの詳細については、マニュアルを読んでください。

Pythonコマンドの場合は、ユーザー入力を待つ理由を確認する必要があります。

おすすめ記事