Ich habe eine Liste von Pids von Prozessen gepflegt, die derzeit auf meinem System (Linux) ausgeführt werden. Jetzt wäre es großartig, wenn ich die Prozessdetails von dieser PID erhalten könnte. Ich bin über syscall.Getrusage () in Golang gekommen, aber ich bekomme keine gewünschten Erfolge. Hat jemand eine Idee dazu?
76
syscall.Getrusage
?getrusage - get resource usage
.Antworten:
Dies ist möglicherweise nicht genau das, was der Fragesteller wollte (es gibt nicht viele klare Informationen darüber, welche Art von Details für jede Prozess-ID erforderlich sind), aber Sie können einige Details einer Aufgabe über ihre PID mit dem Befehl BASH abrufen
ps -p $PID
( ps steht für process Status )Mit Standardoptionen wie
ps -p $PID
folgt:java
)Weitere Informationen zu dieser Prozess-ID können mit dem Optionsflag -o angezeigt werden. Eine Liste finden Sie auf dieser Dokumentationsseite .
Hier ist ein Beispiel, das Ihnen den vollständigen Befehl einer bestimmten Prozess-PID mit Argumenten, Benutzer-, Gruppen- und Speichernutzung zeigt (beachten Sie, wie die mehreren -o-Flags jeweils ein Paar annehmen und wie der Befehl mit viel Leerzeichen ausgegeben wird):
Tipp: Wenn Sie in der Konsole von Menschen gelesen werden möchten, machen Sie args zur letzten Option. In der Regel ist dies die längste und wird sonst möglicherweise abgebrochen.
quelle
Geben Sie einfach dies ein und Sie erhalten, was Sie wollen. Ersetzen Sie 'type_pid_here' durch pid.
quelle
Geben Sie den obigen Code ein, wobei PID die PID des Prozesses ist.
quelle
Du könntest es dir ansehen
/proc/[pid]/stat
. Verwenden Sie beispielsweise Go 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)) } }
Ausgabe:
/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
quelle
Wenn Sie den Prozesspfad anhand der PID anzeigen möchten. Sie können den
pwdx
Befehl verwenden. Derpwdx
Befehl meldet das aktuelle Arbeitsverzeichnis eines Prozesses oder von Prozessen:$ pwdx 13896 13896: /home/user/python_program
quelle