2012-02-21 29 views
27

私はこのシステムから現在実行されているプロセスのpidのリストを保持しています(Linux)。このpidからプロセスの詳細を得ることができれば素晴らしいでしょう。 .Getrusage()はゴランではありますが、私は望みの結果を得ていません。 誰もそれに関連するアイデアを持っていますかpidからプロセスの詳細を取得する方法

+0

あなたは 'syscall.Getrusage'からどのような結果を得ていますか? –

+0

@Atom: 'getrusage - get resource usage'のLinuxのマニュアルページを参照してください。 – peterSO

+0

入力0x0と0x1のために私はいくつかの構造体を与えていると私はこの関数はプロセスの詳細を取得するために使用することはできませんとプロセスを開始した人が排他的に使用していると感じる以下のコードで問題がpeterSOによって私はいくつかのプロセスのために取得している各pidのプロセスの詳細を読み込みます。プロセスが終了してタスクが完了したため、存在しない可能性のあるdirは存在しません。 – geek

答えて

2

/proc/[pid]/statを見ることができます。例えば、移動1、

使用
package main 

import (
    "fmt" 
    "io/ioutil" 
    "os" 
    "strconv" 
) 

func Pids() ([]int, error) { 
    f, err := os.Open(`/proc`) 
    if err != nil { 
     return nil, err 
    } 
    defer f.Close() 
    names, err := f.Readdirnames(-1) 
    if err != nil { 
     return nil, err 
    } 
    pids := make([]int, 0, len(names)) 
    for _, name := range names { 
     if pid, err := strconv.ParseInt(name, 10, 0); err == nil { 
      pids = append(pids, int(pid)) 
     } 
    } 
    return pids, nil 
} 

func ProcPidStat(pid int) ([]byte, error) { 
    // /proc/[pid]/stat 
    // https://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html 
    filename := `/proc/` + strconv.FormatInt(int64(pid), 10) + `/stat` 
    return ioutil.ReadFile(filename) 
} 

func main() { 
    pids, err := Pids() 
    if err != nil { 
     fmt.Println("pids:", err) 
     return 
    } 
    if len(pids) > 0 { 
     pid := pids[0] 
     stat, err := ProcPidStat(pid) 
     if err != nil { 
      fmt.Println("pid:", pid, err) 
      return 
     } 
     fmt.Println(`/proc/[pid]/stat:`, string(stat)) 
    } 
} 

出力:これはアスカーは(プロセスIDごとに必要とされている内容のどのタイプに多くの明確な情報はありません)何を望むかを正確ではないかもしれません

/proc/[pid]/stat: 1 (init) S 0 1 1 0 -1 4202752 11119 405425 21 57 78 92 6643 527 20 0 1 0 3 24768512 563 184467440737095 
45

、しかし、あなたはbashコマンドを使用して、pidでタスクのいくつかの詳細を得ることができ、デフォルトのオプションとしてでは

ps -p $PIDプロセス状態のための短いことPSps -p $PIDこの戻り値:

  • PID:制御端末の名前(もしあれば)
  • TIME:プロセスID
  • TTYエコーどのくらいのCP​​U時間ザ・プロセス実行以降に使用していた(例えば夜12時00分02秒)
  • CMD:このプロセスIDについてのプロセスと呼ばれるコマンド(例えばjava

詳細情報は-oオプションフラグを使用して示すことができます。リストについては、this documentation pageを参照してください。

引数、ユーザー、グループ、およびメモリーの使用状況に応じて、特定のプロセスPIDのフルコマンドを表示する1つの例を示します(複数の-oフラグがそれぞれどのようにペアになるか、およびコマンドが多くの空白埋めをどのように出力するか注意してください)。

ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS 

ヒント:コンソールでの人間読み込み出力のために、引数に最後のオプションを作る - それは、通常は最長になるだろうし、そうでない場合は短く切ってしまうかもしれません。

6

ここで、PIDはプロセスのPIDです。

関連する問題