Posiadam listę pid procesów aktualnie działających w moim systemie (Linux) od tego teraz byłoby wspaniale, gdybym mógł uzyskać szczegóły procesu z tego pid I nadszedł syscall .Getrusage() w golangu, ale nie uzyskuję pożądanych rezultatów. Czy ktoś ma pomysł z tym związany?Jak uzyskać szczegółowe informacje o procesie z jego pid
Odpowiedz
Można spojrzeć na /proc/[pid]/stat
. Na przykład za pomocą 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))
}
}
wyjściowa:
/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
To może nie być dokładnie to, co chciał Pytający (nie ma tam wiele jasne informacji na jaki rodzaj informacji są wymagane dla każdego identyfikatora procesu) , ale można dostać niektóre szczegóły zadania przez jego PID używając polecenia bash ps -p $PID
(ps jest skrótem procesowego statusu)
z opcjami domyślnymi ps -p $PID
ten powraca:
- PID: Echos id procesu
- TTY: nazwa terminala sterującego (jeśli występują)
- TIME: ile czasu CPU jest procesem stosowanym od wykonania (np 00:00:02)
- CMD: polecenie, które nazywa się obróbce (np
java
)
Więcej informacji na temat identyfikatora proces można przedstawić za pomocą -o opcji flagi. Aby uzyskać listę, zobacz this documentation page.
Oto jeden przykład, który przekazuje ci pełne polecenie PID danego procesu z argumentami, użytkownikiem, grupą i pamięcią (zwróć uwagę na to, jak wiele flag -o bierze parę i jak polecenia wyprowadzane są z dużą ilością padów):
ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
Wskazówka: dla wyjścia człowieka odczytać w konsoli, należy args ostatnią opcję - zwykle będzie to najdłuższy i może się uciąć inaczej.
ps -p PID -o comm=
Wprowadź kod powyżej, gdzie PID to PID procesu.
- 1. Informacje o procesie NODEJS
- 2. Jak uzyskać szczegółowe informacje o błędach z JAXB Validator?
- 3. Jak uzyskać szczegółowe informacje o urządzeniu w wersji szybkiej
- 4. Uzyskaj szczegółowe informacje o dostawcy członkostwa
- 5. Usługa Angular 2 http. Uzyskaj szczegółowe informacje o błędzie
- 6. : szczegółowe informacje o błędzie aplikacji z powodu bycia wyświetlanym zdalnie
- 7. Jak uzyskać szczegółowe informacje o słowie z TF Vector RDD w Spark ML Lib?
- 8. Jak uzyskać szczegółowe informacje o zdarzeniach związanych z błędami w Firefoksie za pomocą metody addEventListener?
- 9. Jak uzyskać szczegółowe informacje o bieżącym projekcie budowy w Jenkins z Groovy?
- 10. Jak uzyskać informacje o aktywności z IDialogContext
- 11. Jak uzyskać szczegółowe informacje na temat wyjątku NullPointerException w JSP?
- 12. Uzyskaj szczegółowe informacje o dacie (dzień, miesiąc, rok) w GWT
- 13. Uzyskaj szczegółowe informacje na temat intencji Oczekujących
- 14. Uzyskaj szczegółowe informacje dotyczące uprawnień
- 15. Jak uzyskać bardziej szczegółowe informacje o błędzie na zabitym zleceniu w Oozie
- 16. Asp.net 4.0: Jak uzyskać szczegółowe informacje o wyjątku na stronie błędów niestandardowych?
- 17. Jak uzyskać szczegółowe informacje o aplikacjach działających w tle w mojej aplikacji dla systemu iOS?
- 18. Drupal uzyskać informacje o module?
- 19. Jak uzyskać PID dziecka w C?
- 20. Jak uzyskać dokładniejsze informacje o debugowaniu wiersza/col z klang?
- 21. Jak uzyskać informacje o systemie w PHP?
- 22. Jak uzyskać informacje o stosie wątków w systemie Windows?
- 23. Szczegółowe informacje na temat formatu wielostrumieniowego Microsoft:
- 24. Nie można uruchomić jednorożca, master nie może się uruchomić, sprawdź dziennik stderr, aby uzyskać szczegółowe informacje
- 25. Debugowanie OpenGL lub szczegółowe informacje na konsolę
- 26. Platforma Facebook Messenger: jak uzyskać informacje o użytkowniku?
- 27. Jak uzyskać pid polecenia działającego z sudo
- 28. uzyskać informacje o certyfikacie ssl - .net
- 29. szczegółowe informacje na temat punktu poi w MKMapview
- 30. C#: uzyskać informacje o komputerze w domenie
Jakie wyniki uzyskujesz z 'syscall.Getrusage'? –
@Atom: patrz strona podręcznika systemu Linux dla 'getrusage - get resource usage'. – peterSO
dla danych wejściowych 0x0 i 0x1 daje mi trochę struct i czuję, że tej funkcji nie można użyć do uzyskania szczegółów procesu i jest do wyłącznego użytku przez tego, który rozpoczął proces, problem z poniższym kodem. Przez peterSO jest, kiedy jestem czytając szczegóły procesu każdego pida otrzymuję dla kilku procesów nie ma takiego katalogu, ponieważ może on nie występować, ponieważ proces mógł zostać zabity, zakończył swoje zadanie. – geek