2009-11-22 28 views
5

Linux-kernel sistemdeki tüm işlemleri gösteren proc/pid dosyasını nasıl ve nerede okuyor. Linux-source-2.6.31/fs/proc/bulunamadı. Burada dosyalar var, ama anlaşılması zor çünkü gerçekten karmaşık. Birisi bilir, nasıl çalışır?Linux çekirdeği proc/pid dosyasını nasıl okur?

cevap

8

/proc içeriğini "gerçek" dosyaları olmayan, yani bir sözde dosya sistemidir. Bunun yerine, içerik çekirdek iç veri yapılarının bir temsilidir. Bu nedenle, çekirdeğin okumasına gerek yoktur. bunlara doğrudan erişebilir. Sistem üzerinde çalışan işlemler hakkında bilgi edinmek için (örneğin) ps gibi kullanıcı kipi (yani çekirdek olmayan) programlar tarafından kullanılır. Mevcut olanın çoğunu açıklayan bir man page var.

3

Doğru yere bakıyorsunuz.

fs/proc/base.c'da proc_pid_readdir() işlevi, /proc kök dizini okunduğunda pid girişlerinin listesini doldurmak için kullanılır. Bu işlevdeki tüm işlemlerin ve görevlerin çevresindeki temel döngüyü görebilirsiniz:

ns = filp->f_dentry->d_sb->s_fs_info; 
iter.task = NULL; 
iter.tgid = filp->f_pos - TGID_OFFSET; 
for (iter = next_tgid(ns, iter); 
    iter.task; 
    iter.tgid += 1, iter = next_tgid(ns, iter)) { 
    filp->f_pos = iter.tgid + TGID_OFFSET; 
    if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) { 
     put_task_struct(iter.task); 
     goto out; 
    } 
}