LINUX.ORG.RU

Про иерархию процессов

 ,


0

1

Есть утилита pstree, которая отображает дерево процессов в системе.

init(1)─┬─acpid(2206)
        ├─atd(2854)
        ├─autodir(2301)─┬─{autodir}(2309)
        │               ├─{autodir}(2310)
        │               ├─{autodir}(3217)
        │               └─{autodir}(350)
        ├─avahi-daemon(2275)───avahi-daemon(2276)
        ├─cron(2874)
        ├─cupsd(2331)
        ├─dbus-daemon(2251)
        ├─dbus-daemon(2980)
        ├─dbus-launch(2979)
        ├─dcopserver(3018)
        ├─dhclient3(2226)
        ├─dirmngr(2342)
        ├─exim4(2614)
        ├─famd(2754)
        ├─gconfd-2(3069)
        ├─getty(2903)
        ├─getty(2904)
        ├─getty(2905)
        ├─getty(2906)
        ├─getty(2907)
        ├─getty(2909)
        ├─hald(2780)───hald-runner(2781)─┬─hald-addon-acpi(2811)
        │                                └─hald-addon-inpu(2801)
        ├─hcid(2820)
        ├─kaccess(3048)
        ├─kded(3022)
        ├─kdeinit(3015)─┬─kio_file(1851)
        │               ├─klauncher(3020)
        │               ├─konqueror(1782)
        │               ├─konsole(3144)─┬─bash(2917)─┬─ltib(2933)───sh(2936)───mconf(2937)
        │               │               │            └─pstree(3061)
        │               │               ├─bash(3145)───mc(3163)───bash(3165)
        │               │               ├─bash(3203)───minicom(3216)
        │               │               └─bash(3226)───ssh(3239)
        │               ├─kwin(3030)
        │               └─pidgin(3056)
        ├─kdesktop(3032)───emacs(1981)
        ├─kdm(2889)─┬─Xorg(2896)
        │           └─kdm(2919)───x-session-manag(2944)─┬─kwrapper(3027)
        │                                               └─ssh-agent(2976)
        ├
        ├─kio_uiserver(1758)
        ├─klipper(3058)
        ├─knotify(3060)
        ├─kpowersave(3062)
        ├─ksmserver(3029)
        ├─kxkb(3044)
        ├─lisa(2624)
        ├─nepomukserver(3037)─┬─nepomukservices(3042)
        │                     ├─nepomukservices(3054)
        │                     ├─nepomukservices(3055)
        │                     └─{nepomukserver}(3041)
        ├─netserver(2628)
        ├─notification-da(13652)
        ├─nscd(2684)─┬─{nscd}(2697)
        │            ├─{nscd}(2698)
        │            ├─{nscd}(2699)
        │            ├─{nscd}(2700)
        │            ├─{nscd}(2701)
        │            ├─{nscd}(2702)
        │            ├─{nscd}(2703)
        │            └─{nscd}(2704)
        ├─ntpd(2768)
        ├─portmap(1843)
        ├─rpc.idmapd(1900)
        ├─rpc.mountd(2674)
        ├─rpc.statd(1855)
        ├─rsyslogd(2195)─┬─{rsyslogd}(1561)
        │                └─{rsyslogd}(1562)
        ├─sshd(2287)───sshd(4084)───sshd(4086)───bash(4087)───sh(4088)
        ├─start_kdeinit(3014)
        └─udevd(1027)

Вопрос: кто и в какой момент запускает процесс init? Где в исходниках ядра это место?



Последнее исправление: CYB3R (всего исправлений: 1)

В init/main.c есть замечательная функция:

static void run_init_process(const char *init_filename)
{
        argv_init[0] = init_filename;
        kernel_execve(init_filename, argv_init, envp_init);
}

Это и есть ответ.

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

А вызывается она вот где:

        if (execute_command) {
                run_init_process(execute_command);
                printk(KERN_WARNING "Failed to execute %s.  Attempting "
                                        "defaults...\n", execute_command);
        }
        run_init_process("/sbin/init");
        run_init_process("/etc/init");
        run_init_process("/bin/init");
        run_init_process("/bin/sh");

        panic("No init found.  Try passing init= option to kernel. "
              "See Linux Documentation/init.txt for guidance.");
post-factum ★★★★★
()
Ответ на: комментарий от post-factum

Вообще, посмотри init/main.c весь, он достаточно интересный.

post-factum ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.