开机后启动进程

开机后启动进程

我知道以下是 Linux 中进程启动的方式

  • 来自 init.d (或类似的)
  • 来自 shell(由用户)
  • 由正在运行的本机守护进程派生

在 Linux 上是否有可能启动一个不属于上述类别的进程?例如,是否可以在用户不知情的情况下启动流程?

答案1

在Linux上,几乎所有流程(包括服务器和守护程序)开始于叉子(2)(有时在标准 C 库中使用克隆(2)经常跟随执行(2)系统调用。这守护进程(3)库函数使用这些(以及其他一些)系统调用(列于系统调用(2)....)

唯一的例外情况是很少由内核神奇地启动的进程。这些包括:

  • 在里面(一般来说/sbin/init,这可能是系统如今,您可以引导内核并init=/bin/bash通过 GRUB 传递给它,GRUB 在内核初始化时启动。

  • 一些很少有程序由内核神奇地启动(当某些外部事件发生时),例如有时模组探针,热插拔, ETC....

init存在于 1980 时代的 Unixes(例如 SunOS3)。 AFAIK,自动启动的hotplug类似进程是最近的 Linux 添加(可能是 Linux 3,或至少 2.6,另请参阅乌德夫

大多数程序和进程(包括login, bash, getty, cron, atd, mysqld)都是 & 的后代,initfork基本上execve 可以忽略例外(例如hotplug),并且您可以拥有一个 Linux 系统,其中每个进程都是 的后代init(Linux 1.0 就是这种情况)。 x 上个世纪的内核)。使用树(1)查看进程树。

阅读维基页面有关Linux启动流程&从 PowerUp 到 Bash 提示符(这可能有点过时,但大部分仍然是正确的)。

设置用户标识是一种与特权相关的巧妙机制(另请参见塞特鲁伊德(2),凭证(7),能力(7),命名空间(7))。

我推荐阅读高级Linux编程首先。在那本书之后出现了一些功能或系统调用(例如信号fd(2),inotify(7),电子轮询(7)....)。

相关内容