2013-08-01 4 views
15

Volevo sapere cos'è kthread e perché non richiede memoria e non ha file aperti. Ho scritto un codice che stamperà semplicemente il PID dei processi attualmente in esecuzione in un formato ad albero figlio genitore insieme ad alcune informazioni aggiuntive come VMZ, RSS, thread, openfile usati. Tutti i figli di PID 2 denominati kthreadd non disponevano di VmSize e VmRSS nel file /proc/[pid]/status. il /proc/[pid]/fd non conteneva alcun file aperto.Che cos'è il processo kthreadd e i bambini e come è diverso da init e children

Quali sono questi processi, in che modo sono diversi con i normali processi generati da init (PID 1). Ho letto (in un vecchio libro) che lo swapper genererà init PID1 e tutti gli altri processi sono figli di PID 1. Sicuramente c'è una diversa architettura dietro a questo (kernel Linux 3.7.10.1-16) che non conosco, quindi un'altra domanda è perché PID 2 è figlio di PID 0 e non è figlio di PID 1.

+0

Penso che questo possa aiutare .... http: // unix. stackexchange.com/questions/13290/init-process-ancestor-of-all-processes – Rex

+0

Questa risposta in unix.stackexchange non risponde in dettaglio. Ho bisogno di informazioni più dettagliate. – phoxis

risposta

17

I thread del kernel non sono figli di init perché possono essere avviati prima di tutti i processi dello spazio utente.

In genere vengono utilizzati per gestire l'hardware, motivo per cui vengono gestiti direttamente dal kernel e hanno priorità elevata.

Affinché un processo sia figlio di init, è necessario clonarlo da init e Kthreads non è per questo che il loro PID padre è 0 e significa "nessuno".

Tutti i processi userspace in genere hanno un PID superiore a 1000, solo del kernel thread sono autorizzati ad avere PID inferiore a 1000.

+7

Grazie per la risposta, ma puoi darmi qualche riferimento ad alcuni documenti? – phoxis

Problemi correlati