系统启动后直接从linux内核运行程序

系统启动后直接从linux内核运行程序

我正在尝试直接从 Linux 内核运行我的应用程序(不使用 cron 或类似的东西)。我尝试过使用./init/init.c,但它运行得太早:

$ dmesg 

...
[    0.605657] TEST!!!
...

我的想法是在用户成功登录后启动应用程序,但我找不到合适的功能来使用。

答案1

如果您在用户登录后确实需要它,您可以将其放入 shell 配置文件中。最有可能的~/.bash_profile

您想要添加一行(可能在末尾附近),它只是调用应用程序的文件名,就像您从终端运行它一样,例如:/home/username/bin/mypersonalscript.sh&.您可能需要使用绝对路径。

另请务必在末尾添加 & 符号。这会将进程分叉到后台,如果没有它,您在登录时可能无法进入 shell。

如果它不起作用,请确保您的脚本可执行。

答案2

内核的工作是运行一个进程:在里面,它获取进程ID 1。init的工作是运行其他进程来提供系统服务并允许用户登录。

在其他一些情况下,Linux 内核也会执行进程。例如,当内核在某些总线上检测到新硬件时,它会执行modprobe以将驱动程序加载为模块。另一个例子是可以配置一个程序来通过管道传输核心转储。我认为所有这些情况都使用call_usermodehelper_xxx功能。

您会注意到,只有极少数情况,它们都是由内核事件触发的:硬件事件或程序终止。这些是特殊情况,保留用于低级系统功能。执行进程的正常方法是,它是从一个进程派生出来的,而该进程又是从一个进程派生出来的,而这个进程又是从 init 派生出来的。

内核甚至没有知道关于“成功登录”。登录是一个高级概念,远远高于内核。要在用户登录时以 root 身份运行进程,请将其添加到聚丙烯酰胺配置,与pam_exec模块。要以登录用户身份运行进程,请将其添加到用户的 shell 启动文件中,通常为~/.profile.

相关内容