さて、最近NetEaseのゲームインターンシップで、しばらく時間がかかっていないようです。 。 。 Neteaseのゲームインターンシップに参加する主な目的は、実際にはゲーム会社で何が働いているのかを知ることです。 。まだ興味があります。 。 。
私はかつてゲーム会社はあらゆる種類の背が高いと思っていましたが、彼らの仕事は面白いです。 。結局のところ、ほとんどの場合、ゲームのロジックコードを書くことは今のところそうであるべきではありません。 。 。
とても不思議です。 。 。私はゲーム会社のインターンですが、私はまだ自分のことをしていると感じます。 。 。あなたはpythonでサーバー監視システムを開発したいので、そしてあなたが指定されたプロセスによって占められるネットワーク帯域幅を監視したい場合があるからです。 。 。ええと。 。 pythonを探しても、これを行うための既製のものはありません。 。そしてあなたが使うことができるものが少なくなります。 。 。
しかし、似たようなものが見つかりました。 。 。ネホグス。 。 。 Linuxの下で各プロセスのネットワーク帯域幅を監視するために特別に設計されたプログラム。 。 。
それで私は彼のコード実装を直接見ました。 。 。コードはそれほど多くはありません。 。 。 C ++で書かれています。 。 。そしてそれはとても簡単です。 。 。このセクションでは、コードのこの部分については特に説明しません。 。 。関数実装の原理について話しましょう。 。 。 。
まあ、もっと重要なディレクトリ:/proc
まあ、実際のファイルシステムには存在しないので、疑似ディレクトリです。そのときに作成されたディレクトリ、および保存された情報も、プロセス情報、ネットワーク接続情報などの実行時情報です。 。 。
さて、PIDが7140のプロセスがあるとしたら、次のディレクトリに移動できます。
/proc /7140 /fd
実際にここで名前を見てください。このディレクトリにどのようなデータが格納されているかを推測することができます。それは、現在のプロセスによって開かれたファイル記述子です。 。 。下に示すように:
さて、これは非常におなじみのはずです。 。 。以下のLinuxプログラミングを少し理解しておくと、プログラムでは、ソケット、つまり開いているファイルがファイル記述子に対応していることを知っておく必要があります。 。それから、これらは実際にリンクであり、そして最後にiノードに接続されます。 。 。ここでは、2つのソケットが23045と23046の2つのiノードに対応していることがわかります。 。 。 。
では、上記の2つのソケットの具体的な情報をどのように見つけますか。 。 。 ?
それでは、ターミナルで以下のコマンドを入力してください:cat /proc /net /tcp
出力できるものは以下のとおりです。
これは現在ビルドされているすべてのローカルマシンです。 TCP情報。 。 IPアドレス、ポート啥。 。 。最後に、プロジェクト、inodeも見ることができます。 。 。これは、iノードが関連付けられているリンクです。 。 。
前に見たプロセスのファイルディスクリプタとその特定のリンク情報をマッピングできるはずです。 。 。
わかりました。 。 。上記の過程を通して。 。プロセスが確立したすべての接続に関する情報を取得できます。 。 。
次に、ネットワークトラフィックを計算する方法を説明します。 。 。
さて、ここでnethogsが使っている方法は、libcapを使ってパケットをキャプチャしてから、ネットワークパケットを分析して各接続のネットワークトラフィックを計算することです。 。 。 (そうですね、nethogsのソースコードで直接多くのコードが使われています)
さて、ここでは実装コードを列挙するのは特定ではありません。 。
c ++とlibcapを使ってpython用のLinux拡張ライブラリを書く。 。 。コードはgithubに渡されました。 。 。アドレスは次のとおりです。
https://github.com/2225377fjs/processNet
2つの私のコンピュータのハードドライブの合計に対して、ソリッドステートディスク(SDA)がwin7のは、さらに定期的なハードドライブ(SDB)とインストールUbuntuのCentOS
最初に、インストールパッケージソフトウェア ここにいくつかの必要なものがあります、私は下のダウンロードパッケージを添付、Apache、MySQL、PHPはyumを通してインストールすることができます。
システムファンクションコールは、Unix /Linuxオペレーティングシステムがユーザープログラムをサポートするために提供するインターフェイスであることを知っていますこれらのインターフェイスを通して、アプリケーションはオペレーティングシステムにサービスを要求し、制御はオペレーティングシステムに転送されます。結果はユーザプログラムに返されます。
システムコールの主な目的は、システムプログラムを知らなくても、デバイ
} _TIF_SYSCALL_AUDIT
< /dev /null> O_CLOEXEC);…………エラーpeerlen =のはsizeof取り扱い//そこEMFILEエラ