GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir l'heure de l'utilisateur et du noyau d'un processus en cours d'exécution ?

Existe-t-il un moyen de déterminer à l'aide d'outils Linux/Unix standard combien un processus a dépensé en mode utilisateur et combien d'attente pour le noyau ?

En d'autres termes, exactement les valeurs "user" et "sys" que vous obtenez en utilisant time , mais pendant processus d'exécution ?

REMARQUE : une façon est d'utiliser WBEM et d'énumérer Linux_UnixProcess, mais j'ai besoin d'utiliser autre outil que cela; mon objectif est de vérifier ce que le fournisseur WBEM me dit, c'est-à-dire que je dois utiliser un outil différent.

Réponse acceptée :

Sous Linux, les informations sont disponibles dans les champs 14 à 17 de /proc/$pid/stat (voir proc(5) pour plus de détails):

Les champs sont :

  • 14 :temps utilisateur (en nombre de ticks d'horloge)
  • 15 :temps système
  • 16 :temps d'attente des enfants par l'utilisateur
  • 17 : temps d'attente systématique des enfants

(tous les threads d'un processus donné y ont les mêmes valeurs)

Ils ne sont pas directement signalés par ps .

ps rapporte 14 + 15 avec ps -o time et 14 + 15 + 16 + 17 avec ps --cumulative -o bsdtime .

Attention, le second champ dans /proc/$pid/stat peut contenir des espaces ou des caractères de saut de ligne, vous ne pouvez donc pas l'analyser avec le $1 d'awk , $2

Vous pouvez utiliser perl comme :

$ perl -MPOSIX -l -0777 -ne '@f = /(.*)|S+/gs;
    printf "utime: %.2fnstime: %.2fncutime: %.2fncstime: %.2fn",
      map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[13..16]' "/proc/$pid/stat"
utime: 3.79
stime: 2.06
cutime: 56.49
cstime: 34.27

Un processus peut récupérer ses propres temps avec getrusage(RUSAGE_SELF) et getrusage(RUSAGE_CHILDREN) .

Il y a aussi un times appel système qui récupère les mêmes informations. Les shells POSIX ont un times intégré pour cela. Certains shells fournissent également cette information avec time (sans arguments).

$ times
0m3.800s 0m2.060s
0m56.512s 0m34.276s

$ ps -o time -p "$$"
    TIME
00:00:05
$ ps --cumulative -o bsdtime -p "$$"
  TIME
  1:36

Linux
  1. Linux - Différence entre l'espace utilisateur et l'espace noyau ?

  2. États de processus Linux

  3. Script Linux pour vérifier si le processus est en cours d'exécution et agir sur le résultat

  4. PHP et mod_fcgid :ap_pass_brigade a échoué dans la fonction handle_request_ipc

  5. Copier et chmod/chown en même temps

Le noyau Linux et ses fonctions

Comment trouver et tuer les processus en cours d'exécution sous Linux

Processus en cours d'exécution

Exécuter Apache en tant qu'utilisateur différent

Quelle est la différence entre le noyau préemptif non préemptif, préemptif et préemptif sélectif ?

Quelle est la différence entre l'espace utilisateur et l'espace noyau ?