問題のあるプロセス調査

問題のあるプロセス調査

コマンドやプロセスが中断、停止、または競合しているように見えるときに、現在の背後で何をしているのかを調べる方法はありますか?

競合が発生しているのか、それとも時間がかかる操作を実行しているのかを確認するのに特に便利です。期待どおりに機能しない場合は、問題を解決するのに役立ちます。ありがとうございます。

答え1

これを行うには、2つの下位レベルstraceのツールを使用できます。gdb可用性は、straceLinuxまたはLinuxが実行されているオペレーティングシステムを使用していると想定しています。他のオペレーティングシステムの場合truss、またはがあるかもしれませんが、dtrace技術は似ています。

ストレス

そのため、straceより使いやすく、gdb一般的に「このアプリの機能は何ですか?」という質問によく答えます。 (私に)一般的な使い方は次のとおりです。

strace -f -tt -s 200 -p $PID

必要な唯一の実際のオプションはです-p $PID。他のオプションは出力行にさらに情報を追加するだけで、実際には必要ありません。

それがすることは、アプリケーションが作成するすべてのシステムコールを表示することです。アプリケーションがマーキング以外の操作を実行できる唯一の方法は、純粋に計算的なstraceケースです。数字などを扱うことを意味します。ファイルの読み取り/書き込み、パケットの送信、現在時刻の取得などの操作には、すべてシステムコールが必要で表示されます。

データベース

gdb以下のレベルには、straceアプリケーションgdbが実際に実行されるコード行が表示されます。しかし、ここにはいくつかの問題があります。最も重要なのは、アプリケーションにデバッグシンボルが必要であることです。これは通常、ディストリビューションによって提供されるパッケージから削除されます。しかし、RedHat派生のようなディストリビューションでは一般的にpkgfoo-debuginfo-1.2.3.rpm。もう1つのことは、strace時間の経過とともにアプリケーションが実行しているタスクをどこで表示するのか、gdb検査中にプロセスを停止するため、アプリケーションが現在実行中のタスクを表示できることです。

とにかく使用法は次のとおりです。

gdb -p $PID

...これにより、次のコマンドを実行できるインタラクティブシェルに移動します。

where

または

info threads

gdbアプリケーションの複雑さに応じて複雑になる可能性があり、インターネットには多くのガイドがあるため、使用方法について詳しく説明しません。

プロセスナビゲーションを完了して再開するには、quitまたはCTRL+を使用しますD

答え2

追加フラグを使用すると、詳細な出力を使用してターミナルウィンドウでほとんどのプロセスを開始できます-v。これにより、ターミナルウィンドウが停止しているように見えるときにターミナルウィンドウで何が起こっているかを確認できます。

topまたhtop、メモリとCPU使用率に関する更新された情報、および非常に便利な要約情報を含む、実行中のプロセスに関する有用な情報も提供します。

psコマンド文書を表示することもできますman ps

関連情報