コマンドやプロセスが中断、停止、または競合しているように見えるときに、現在の背後で何をしているのかを調べる方法はありますか?
競合が発生しているのか、それとも時間がかかる操作を実行しているのかを確認するのに特に便利です。期待どおりに機能しない場合は、問題を解決するのに役立ちます。ありがとうございます。
答え1
これを行うには、2つの下位レベルstrace
のツールを使用できます。gdb
可用性は、strace
Linuxまたは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
。