Linux: est-il possible de voir uniquement les threads / processus de l'espace noyau?

27

Je sais qu'il existe deux "niveaux" de programmes: l'espace utilisateur et l'espace noyau.

Ma question est: je veux voir uniquement les programmes du noyau, ou mieux: les programmes sur l'espace du noyau.

Cette approche est-elle correcte?

ps -ef|grep "\["

root         1     0  0 20:23 ?        00:00:00 init [4]
root         2     0  0 20:23 ?        00:00:00 [kthreadd]
root         3     2  0 20:23 ?        00:00:00 [ksoftirqd/0]
root         5     2  0 20:23 ?        00:00:00 [kworker/0:0H]
root         7     2  0 20:23 ?        00:00:06 [rcu_sched]
root         8     2  0 20:23 ?        00:00:00 [rcu_bh]
root         9     2  0 20:23 ?        00:00:00 [migration/0]
root        10     2  0 20:23 ?        00:00:00 [migration/1]
root        11     2  0 20:23 ?        00:00:00 [ksoftirqd/1]
root        13     2  0 20:23 ?        00:00:00 [kworker/1:0H]
root        14     2  0 20:23 ?        00:00:00 [migration/2]
....
elbarna
la source
5
> est-il possible de voir les programmes spatiaux du noyau? ... Oui! Vous avez simplement besoin du bon filtre astronomique sur votre CCD ... ;-)
RubberStamp
5
Les programmes spatiaux @steve Kernel sont vraiment strictement tangentiels aux modules. Tous les modules n'ont pas de processus et tous les processus ne sont pas des modules.
Chris Down du
3
La question est fausse: vous voulez voir les processus du noyau (ou les threads du noyau, ou les tâches du noyau) et non les programmes du noyau .... Il n'y a qu'un seul programme impliqué: le noyau (et les modules du noyau sont ajoutés dans le noyau).
Basile Starynkevitch
Je vais corriger maintenant
elbarna

Réponses:

42

Les processus du noyau (ou "threads du noyau") sont des enfants de PID 2 ( kthreadd), donc cela pourrait être plus précis:

ps --ppid 2 -p 2 -o uname,pid,ppid,cmd,cls

--deselectCliquez sur Ajouter pour inverser la sélection et afficher uniquement les processus de l'espace utilisateur.

(Cette question était à peu près l'inverse exact de celle-ci .)

Dans les noyaux 2.4. * Et plus anciens, cette convention PID 2 n'existait pas encore.

telcoM
la source
Est-ce toujours vrai? Voir le quatrième commentaire de cette question: stackoverflow.com/q/12213445/1971003
Guy Avraham
Il est possible qu'au début des noyaux 2.6. *, La conversion vers la convention "enfant du PID 2" n'ait pas été complètement terminée. Comme HighKing l'indique, le nom de PID 2 ne s'est pas non plus complètement stabilisé au kthreadd2.6.18. Si vous êtes intéressé par les détails exacts, rendez-vous sur kernel.org et utilisez l'interface du navigateur git pour explorer l'historique des premiers kernel/kthread.cfichiers.
telcoM
4

Les threads du noyau n'utilisent pas du tout de RAM (ou du moins sont affichés pour ne pas en utiliser):

ps -eo cmd,vsize,rss | grep -E ' 0 +0$'
Patrick Mevzek
la source
1

Si vous avez tunainstallé, vous pouvez lister tous les threads du noyau comme ceci:

$ tuna -U -P
                      thread       ctxt_switches
    pid SCHED_ rtpri affinity voluntary nonvoluntary             cmd 
  2      OTHER     0     0xff       290            1        kthreadd  
  3      OTHER     0     0xff         2            0          rcu_gp  
  4      OTHER     0     0xff         2            0      rcu_par_gp  
  6      OTHER     0        0        13            0 kworker/0:0H-kblockd  
  9      OTHER     0     0xff         2            0    mm_percpu_wq  
  10     OTHER     0        0       448            0     ksoftirqd/0
[..]
maxschlepzig
la source