我刚切换到 debian jessie,大多数东西都运行正常,包括我的图形显示管理器wdm。
问题是,我只是不明白这是如何工作的。显然我的/etc/init.d/wdm脚本被调用了,因为当我exit在那里提前放置时,wdm 没有启动。但是当我或者重命名 /etc/rc3.d目录时(我的默认运行级别曾经是 3),然后 wdm 仍然启动。
我不知道 systemd 如何找到这个脚本,我不明白它对所有其他 init.d 脚本做了什么。
我只想知道 in 之间的区别
reboot init 6shutdown -r now哪个是最安全和最好的?
这可能与检测操作系统有关,但我特别需要系统上当前使用的 init 系统。
Fedora 15 和 Ubuntu 现在使用 systemd,Ubuntu 过去使用 Upstart(很长时间默认直到 15.04),而其他人使用 System V 的变体。
我有一个应用程序,我正在编写它作为跨平台守护程序。初始化脚本是根据可以在配置时传入的参数动态生成的。
我想做的只是为他们正在使用的特定初始化系统生成脚本。这样,安装脚本可以在没有参数的情况下以 root 身份合理运行,并且守护进程可以自动“安装”。
这是我想出的:
这样做的最佳跨/平台方式是什么?
有点相关,我可以依赖 bash 来支持大多数 *nix 还是依赖于发行版/操作系统?
目标平台:
是否有一种简单的方法可以找出正在使用的 initsystem,例如最近的系统Debian wheezy或Fedora系统正在使用哪个 initsystem ?我知道Fedora 21使用systemdinitsystem 但那是因为我读过它并且因为所有相关的脚本/符号链接都存储在/etc/systemd/. 但是,我不确定例如Debian squeeze或CentOS 6 or 7等等。
有哪些技术可以验证这种初始化系统?
我有一台安装了 lightdm 的运行 Debian 8 (Jessie) 的远程机器。我希望它以无 GUI 模式启动,但我不想删除所有与 X 相关的东西,以便仍然能够通过带-X参数的SSH 运行它。那么如何禁用 X 服务器自动启动而不删除它呢?
我试过systemctl stop lightdm,它停止了 lightdm,但它在重新启动后再次运行。我也试过systemctl disable lightdm,但它基本上什么都不做。它在/etc/rc*.d目录中重命名lightdm的脚本,但它在重新启动后仍然启动,所以我做错了什么?而且我不能只是update-rc.d lightdm stop,因为它已被弃用并且不起作用。
我研究 Linux 内核行为已经有一段时间了,我一直很清楚:
当一个进程终止时,它的所有子进程都会返回给该
init进程(PID 1),直到它们最终终止。
然而,最近,一个比我在内核方面更有经验的人告诉我:
当一个进程退出时,它的所有子进程也会死亡(除非你
NOHUP在这种情况下使用它们返回到init)。
现在,即使我不相信这一点,我仍然编写了一个简单的程序来确保它。我知道我不应该依赖时间 ( sleep) 进行测试,因为它完全取决于进程调度,但对于这个简单的情况,我认为这已经足够了。
int main(void){
printf("Father process spawned (%d).\n", getpid());
sleep(5);
if(fork() == 0){
printf("Child process spawned (%d => %d).\n", getppid(), getpid());
sleep(15);
printf("Child process exiting (%d => %d).\n", getppid(), getpid());
exit(0);
}
sleep(5);
printf(stdout, "Father process exiting (%d).\n", getpid());
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
这是程序的输出,ps每次printf通话时都有相关的结果:
$ ./test &
Father process spawned (435).
$ ps -ef | grep test
myuser 435 392 tty1 …Run Code Online (Sandbox Code Playgroud) 我正在创建一个 linux 发行版,现在我需要一个 init 程序。我可以很好地用 c 编写代码,而且我对 linux 了解很多(虽然不多,但我已经使用 arch linux 进行了 4 年的开发),所以我想我应该尝试用 C 编写我自己的基本初始化脚本。我是只是想知道,init 做了什么任务来为一个简单的 shell 设置系统?(当我问“init 有什么作用?”时,我确实知道 init 是什么以及它的用途。我只是不知道它做了什么任务。)
我不需要代码,我什至可能不需要基本命令,但我确实需要它们运行的顺序。
在最近的“为什么 'kill -9 0' 结束我的控制台会话”和“如何获得内核恐慌”问题之间,我在我的马鞍下有一个毛刺,并尝试kill -9 1了一个最新的 Arch linux 笔记本电脑。我是作为用户 ID“root”来做的。
我完全预料到会发生某种崩溃、恐慌或关机,但什么也没发生。我又做了kill -9 1一次,没有效果。
Arch linux 机器systemd这些天都systemd在运行,所以:如何在 kill -9中幸存下来?我希望在 Linux 3.7 内核中有特殊情况代码,但也许存在一些我没有想到的其他原因。
用 PID 1 运行的其他东西呢?init我相信Slackware 仍在使用,但我害怕在我的生产 Slackware 服务器上尝试它。我的无线路由器上的 DD-WRT 运行某种形式的 /sbin/init。