我假设您使用的是 Linux。
例如在我的系统(Ubuntu 20.04 x86_64)上打印top -u root:
PID PPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 0 root 20 0 170380 11368 6500 S 0.0 0.0 0:23.52 systemd
2 0 root 20 0 0 0 0 S 0.0 0.0 0:00.61 kthreadd
3 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
10 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
11 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_rude_
12 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_trace
13 2 root 20 0 0 0 0 S 0.0 0.0 0:04.48 ksoftirqd/0
14 2 root 20 0 0 0 0 I 0.0 0.0 1:28.82 rcu_sched
您会看到所有进程最终都从 PPID(父进程 ID)零继承。
这个过程不是一个过程,它代表了Linux 调度程序.然后 systemd (PID 1) 由内核启动,系统中的所有其他进程由 systemd 启动。
在用户级别top -u madfred
3371 1 madfred 20 0 19928 7664 6136 S 0.0 0.0 0:11.62 systemd
3372 3371 madfred 20 0 170404 2460 0 S 0.0 0.0 0:00.00 (sd-pam)
3379 3371 madfred 39 19 659828 16348 12500 S 0.0 0.0 0:02.38 tracker-miner-f
3402 3371 madfred 20 0 8664 5112 3412 S 0.0 0.0 0:00.94 dbus-daemon
3407 3371 madfred 20 0 239712 6740 6064 S 0.0 0.0 0:00.03 gvfsd
有一个user systemd 由root systemd 启动并以用户身份运行。该用户 systemd 负责为该用户启动每个进程。
这对于确保 Linux 操作系统提供的所有保证(如安全性、内存保护、文件资源等)是必要的。
您想要的是用其他东西替换内核,这是很有可能的。检查例如:
https://wiki.osdev.org/Bare_bones
https://github.com/contiki-ng/contiki-ng
用您自己的自定义初始化程序替换 systemd(或旧的 /sbin/init)非常容易。检查这个答案:
Writing my own init executable