停止せずに実行されているコマンドを知る方法は?


20

この例では、実行に非常に長い時間(数時間)を要するコマンドを実行しています。

makeまたはmake -j4を入力したかどうかは本当に覚えていません。

もちろん、それを停止してキーを押すか、履歴を確認してそれを知ることはできますが、それはプロセスを停止し、それが発生しないようにします(すでにmake -j4を実行している場合)。

プロセスを停止せずに、どのコマンドが実行されているかを知る方法はありますか?


5
別の端末から、試すpgrep -a make
John1024

2
以下の場合はmakeあなたを停止して再起動して、中断したところ、それは拾う必要がありますすることができます。
user253751

回答:


34

makeコンピューターで実行されているすべてのインスタンスの完全なコマンドラインを表示する場合は、新しいターミナルを開いて試してください:

pgrep -a make

pgrepは、コンピューター上のすべてのプロセスを検索するプログラムです。この場合、という名前のプログラムを探していますmake。このオプション-apgrep、一致する各プロセスのプロセスIDと完全なコマンドラインの両方をリストするように指示します。(なし-aでは、プロセスIDを返すだけです。)pgrepの多くのオプションの詳細については、を参照してくださいman pgrep


7
これは、問題のような単純なケースに役立ちます。ただし、コマンドにパイプライン、ループ、コマンドのシーケンス、内部コマンド、または変数の展開が含まれる場合、検索結果pgrepはコマンドラインで入力したコマンドとは異なります。
カスペルド

28

ターミナルウィンドウがアクティブなときに、Ctrl+ を押してプロセスを一時停止(中断)できますZ。入力すると、バックグラウンドでジョブをプッシュできますbg(ジョブはバックグラウンドで続行され、同時にコマンドラインで作業できます。これは&、コマンドラインの最後でジョブを開始するのと同じです)。次に、カーソル矢印(上下)を使用して、使用したコマンドを確認します。必要な場合(ただし、これは必須ではありません)を入力すると、ジョブをフォアグラウンドに戻すことができますfg


7
これは一部のコマンドで機能しますが、すべてではありません。たとえば、次のようにループを入力した場合for X in {1..1000} ; do sleep $X ; done、ループは中断され、残りの反復は発生しません。
カスペルド

11
@kasperdはい、私に尋ねるとかなり迷惑ですが、その問題のクールな回避策を発見しました。そのような複雑なコマンドを括弧で囲み、サブシェルになります。次に、Ctrl-Zはサブシェル全体を中断し、正しく再開します。
ペンギン359

@kasperd bashではなく、zshで実行します。
JoL

4
バックグラウンドにジョブを配置する必要はありません。それを一時停止し、履歴を確認し(またはjobs@ichabodの回答に示されているように)、それからを介して再開するだけで十分fgです。
コンラッドルドルフ

10

Stefan:^ Zのようなことをして、ジョブを一時停止してから、を実行しjobsます。複数のプロセスを実行している場合、一時停止したジョブを整理する必要がありますが、通常はコマンドラインが表示されます。その後、実行fgを継続するために実行します。


1

これを動的に確認する良い方法は、topを実行することです。これにより、システム全体の状態とシステムで実行中のプロセスがわかります。

「ps ux」を実行すると、プロセスがpidおよびその他の情報とともに表示されます。必要に応じてスキルを使用してそれらの一部を強制終了できます。デバイスの待機などでハングします。-hupなどのプロセスに他のシグナルを送信したり、デーモンを再起動したりすることもできます。

Topは、プロセスサイズ、経過時間、現在のCPU状態、およびメモリとスワップの状態を表示するので便利です。

私はよくmake.outログファイルで$ make>&make.out&を実行してからlessまたはtail -fを実行します。現在、makeはシェルセッションからプロセスとして切り離されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.