相关疑难解决方法(0)

109
推荐指数
3
解决办法
14万
查看次数

用户空间和内核空间有什么区别?

当内核代表用户程序(即系统调用)执行时是否使用内核空间?或者它是所有内核线程(例如调度程序)的地址空间?

如果是第一个,那么是否意味着普通用户程序的内存不能超过3GB(如果划分为3GB + 1GB)?另外,在这种情况下,内核如何使用高端内存,因为高端内存中的页面将映射到哪个虚拟内存地址,因为 1GB 的内核空间将被逻辑映射?

linux drivers kernel

98
推荐指数
2
解决办法
14万
查看次数

父进程死亡时的新父进程

在 UNIX 中,当父进程消失时,我认为所有子进程都将 init 重置为其父进程。这不是一直正确吗?有任何例外吗?

process exit init

27
推荐指数
3
解决办法
2万
查看次数

init 进程可以是 Linux 中的 shell 脚本吗?

我正在阅读有关设置自定义 initramfs教程,其中指出:

唯一缺少的是 /init,它是 initramfs 根目录中的可执行文件,一旦加载内核就会执行。因为 sys-apps/busybox 包含一个功能齐全的 shell,这意味着您可以将 /init 二进制文件编写为一个简单的 shell 脚本(而不是使它成为一个必须编译的用汇编程序或 C 编写的复杂应用程序)。

并给出了一个以 init 开头的 shell 脚本示例 #!/bin/busybox sh

到目前为止,我的印象是 init 是启动的主进程,所有其他用户空间进程最终都是 init 的子进程。但是,在给定的示例中,第一个进程实际上是bin/busybox/ sh从中产生后来的 init 的。

这是正确的解释吗?例如,如果我当时有一个可用的解释器,我可以将 init 编写为 Python 脚本等吗?

linux init-script init

16
推荐指数
2
解决办法
8130
查看次数

什么可以使将 init=/path/to/program 传递给内核而不是将程序作为 init 启动?

我正在尝试在 Linux 系统上调试 init 脚本;我正在尝试传递init=/bin/sh给内核以使其在sh不启动的情况下启动,init以便我可以手动运行 init 序列。

我发现内核init无论如何都在启动。在启动期间,printk 消息之一是命令行,这表明该行设置正确;此外,我可以使用内核命令行影响其他事情。我已经检查以确保路径存在;确实如此。

这是一个busybox系统,init是busybox的符号链接;所以为了确保busybox在PID为1时不会做奇怪的事情,我还尝试将非busybox程序作为init运行;那也没有用。似乎无论我做什么,init 都会运行。

什么可能导致这种行为?

linux init

14
推荐指数
2
解决办法
1万
查看次数

init 进程退出时的 Linux 内核操作

假设我正在编写自己的在 Linux 内核上运行的 init 程序。

当我的 init 程序以返回值 0 退出时会发生什么?

此外,如果返回值非零,行为是否不同?

init linux-kernel exit-status

8
推荐指数
1
解决办法
3260
查看次数

bash:此 shell 中没有作业控制

我有一个最小的 Linux 系统。

INIT是/bin/bash,只有最低限度以库/lib//dev/静态填充,没有运行的守护进程(无udev的,..)

当 bash 启动时,我收到以下错误:

bash: cannot set terminal process group (-1) inappropriate ioctl for device
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)

当我用 strace 启动 bash 时,我得到以下输出:

rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
open("/dev/tty", O_RDWR|O_NONBLOCK)     = -1 ENXIO (No such device or address)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0

....

readlink("/proc/self/fd/0", "/dev/console"..., 4095) = 12
stat("/dev/console", {st_mode=S_IFCHR|0600, st_rdev=makedev(5, 1), ...}) = 0
open("/dev/console", O_RDWR|O_NONBLOCK) = …
Run Code Online (Sandbox Code Playgroud)

bash terminal tty ioctl

8
推荐指数
1
解决办法
9198
查看次数

Ctrl + C 在 Linux 上的单用户模式下不起作用

我不知道“单用户模式”是否是正确的术语,但我继续:

在 GRUB 菜单上,我按下E编辑运行配置。在以 开头的行中linux,我附加了以下内容:

rw init=/bin/bash
Run Code Online (Sandbox Code Playgroud)

并按下F10。计算机启动到 root shell 而不询问任何密码。

问题是,信号不起作用。例如,当我运行一个命令时,我无法通过按Ctrl+退出该命令C

这是预期的吗?如果是,这是什么原因,我该如何解决?是否与单用户模式下的终端模拟器有关?

linux signals grub2 console

5
推荐指数
1
解决办法
930
查看次数

“init”和“服务管理器”有什么区别?

From当操作系统关闭时,服务管理器如何知道它应该向其服务发送 SIGTERM 和 SIGKILL?

systemd 既是 init 又是服务管理器

“init”和“服务管理器”有什么区别?

我猜他们是同一个东西?

什么是“init”而不是“服务管理器”的例子?反之亦然?

谢谢。

linux systemd init services sysvinit

5
推荐指数
3
解决办法
3156
查看次数