Próbuję stworzyć program w C/C++, aby zachowywał się jak najwyższa komenda w Linuksie. Zrobiłem kilka badań i już wiedziałem, jak liczyć Procesor Wykorzystanie procesu. Możemy uzyskać użycie procesora przez obliczenie czasu i czasu z/proc/[PID]/stat w bieżącym czasie i po kilku sekundach. Następnie obliczyć różnice między utime a utime i podzielić wynik z różnicami w czasie działania, a następnie uzyskamy procent wykorzystania procesora. Będzie to bardzo łatwe w przypadku procesu pojedynczego procesu/wielowątkowego.Jak liczyć użycie procesora wieloprocesowego w Linuksie
Problem występuje w takim przypadku, jak httpd, gdzie działa jako proces wieloprocesowy. Gdy serwer jest zajęty, httpd rozwinie procesy podrzędne, aby obsłużyć kilka żądań. Następnie liczę całkowitą liczbę procesów, powiedzmy 500. Chcę obliczyć użycie procesora tych procesów, ale podsumuję je, tak że widzę tylko 1 użycie procesora httpd. Ale jeśli zrobię algorytm, o którym wspomniałem powyżej, kiedy liczba procesów zmniejszy się do < 500 po kilku sekundach, otrzymam wartości ujemne, ponieważ obliczenia będą takie (na przykład wybiorę liczbę losową, aby daje krótki opis):
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
Jeśli spojrzeć na powyższy przykład, delta stime + utime będą wyniki w wartości ujemnej, ponieważ liczba procesu maleje, i dać niższą wartość po kilku milisekundach. Po prostu chcę wiedzieć, czy istnieje jakikolwiek inny sposób obliczania takiego procesu zachowującego się w ten sposób? Dziękuję Ci.
Skąd znasz zestaw procesów? Przez swoją grupę procesową? Jak nazywa się program? –
Po pierwsze, otrzymuję główny proces nadrzędny. Wiem o tym, ponieważ ma on ppid 1 i powiedzmy jego pid 1227. Następnie przeszukaj cały katalog/proc /, który ma ppid 1227. Jeśli/proc/pid1/stat ma ppid 1227, to dodaję jego utime i stime do 1227 utime i stime. –