首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >UNIX init进程是否总是运行

UNIX init进程是否总是运行
EN

Stack Overflow用户
提问于 2016-04-22 07:46:40
回答 4查看 674关注 0票数 1

关于UNIX中的init进程是如何工作的,我有一个问题。据我所知,init进程首先启动,然后是其他进程分叉它。

比如说,我们启动init进程,然后用一个新的程序对一个子进程进行分叉,然后调用exec,这个程序碰巧会导致子进程等待一些I/O输入。现在父init进程可以等待子进程,但是如果它这样做了,那么就没有其他进程要运行了。相反,如果init进程不等待,而是陷入等待循环或其他情况,那么当子进程恢复时,父进程现在占用处理器时间,什么也不做。

处理这个问题的最佳方法是什么?init进程应该始终运行无限循环,而不必担心浪费的资源吗?或者有没有更好的方法。

任何帮助都会很感激的,本

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-27 17:06:50

进程1绝不能退出;很多(全部?)Unix的实现会迫使系统崩溃。

但是,process 1不需要做更多的事情(假设内核在将控制权转移到用户空间之前在控制台上打开fds 0、1和2-如果您真的要自己编写init,请查看内核的文档以了解引导环境的其他细节):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
    pid_t child = fork();
    if (child == -1) {
        perror("init: fork");
        return 1;
    }
    if (child == 0) {
        execl("/etc/rc", "/etc/rc", (char*)0);
        perror("/etc/rc");
        return 1;
    }
    for (;;)
        wait(0);
}

启动/etc/rc之后,它确实会进入一个无限循环,一次又一次地调用wait,并丢弃结果。但是wait是一个阻塞的系统调用。每次调用它时,内核都会将CPU从进程1中提取出来,并将其分配给有有用工作要做的进程;只有当有一个退出子进程要报告时,wait才会返回。(如果没有有有用工作要做的进程,CPU将处于低功耗“睡眠”状态,直到某个外部事件(例如键盘上的人工输入或网络数据包到达时)使运行过程有一些工作要做。

使用这种最小的init,启动计算机所需的所有程序以使计算机做一些有用的事情完全是/etc/rc的责任,而这些程序的责任是在需要的时候继续运行;如果这个进程之外的每一个进程都退出,那么它就会永远睡在wait里。更复杂的实现将完成更多工作,例如,如果网络服务器崩溃,就重新启动网络服务器。

票数 1
EN

Stack Overflow用户

发布于 2016-04-23 03:34:43

有一个解决方案:SIGCHLD。当一个子节点改变其状态(停止或退出)时,它是一个可以传递给父级的信号。因此父函数可以进入休眠状态(例如,sigpausesigsuspend ),并且在子节点终止时会被中断,然后父进程运行一个适当的信号处理程序来调用wait-family函数之一。

票数 1
EN

Stack Overflow用户

发布于 2016-04-22 07:56:20

在启动时,我不会担心资源问题。您的服务器正在启动,而不是用于它的预期目的,因此在这段时间内没有对它的性能要求。

我从未见过在引导过程中编写用于接受标准输入的进程,尽管如果您想编写一个过程,这是可能的。我知道init脚本可以使用依赖项编写,具体取决于您使用的发行版以及引导过程(upstart、system init等)。但在默认情况下,它们按照init使用的顺序以同步方式运行。我不确定阻止输入的同步process...waiting会对系统产生多大影响。最有可能的是,它只执行that....stop并等待输入才能继续。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36798208

复制
相关文章
Linux下Unicorn服务器配置
Unicorn 是什么? 1. 为 Rack 应用程序设计的 HTTP server 2. 是一个利用Unix的高级特性开发的 3. 为具备低延迟,高带宽的连接的客户服务
星哥玩云
2022/06/29
10.1K0
unicorn 记录
unicorn官网:https://www.unicorn-engine.org/
tea9
2022/09/08
5840
unicorn 记录
如何在Ubuntu 14.04上使用Unicorn和Nginx部署Rails应用程序
当您准备部署Ruby on Rails应用程序时,需要考虑许多有效的设置。本教程将帮助您部署Ruby 在 Rails应用程序中的生产环境,使用PostgreSQL作为数据库,在Ubuntu 14.04上使用Unicorn和Nginx。
丰一川
2018/09/28
4.3K0
TW洞见〡Ruby Web服务器:这十五年
文章作者来自:ThoughtWorks - 韩翼。 坦率的说,作为一门年轻的计算机语言,Ruby在最近二十年里的发展并不算慢。但如果与坐拥豪门的明星语言们相比,Ruby就颇显平民范儿,表现始终不温不火,批评胜于褒奖,下行多过上扬。但总有一些至少曾经自称过Rubyist的程序员们,愉快地实践了这门语言,他们没有丝毫的歧视习惯,总是努力尝试各家之长,以语言表达思想,用基准评判高下,一不小心就影响了整个技术发展的进程。 本文谨以Ruby Web服务器技术的发展为线索,回顾Ruby截至目前最为人所知的Web领域中
ThoughtWorks
2018/04/16
2K0
TW洞见〡Ruby Web服务器:这十五年
图解 Unicorn 工作原理
我很早之前,就是通过这篇文章搞懂了 Python Web 应用服务器是个什么鬼,虽然本文讲的是 Ruby 的 Web 应用服务器,但原理是通的所以翻出来推荐给大家,下面是正文。
HelloGitHub
2021/05/14
1.3K0
图解 Unicorn 工作原理
或 、与、异或
& 与 (都是1时,结果才为1) 表示按位与。 &表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。 二进制与运算规则:1&1=1  1&0=0  0&0=0 | 或  (只要有1,那么就是1) 表示按位或 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位(也就是最后一位)相或。只要对应的二个二进位有一个为1时,结果位就为1。 ^ 异或 (只要一样结果就是0) 按
Lokinli
2023/03/09
9370
Nginx 作为下载服务器
特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!
收心
2022/01/19
2.2K0
如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序
在部署基于Rails的Web应用程序时,简单设计的应用程序服务器可以在几分钟内启动并运行。但是,如果您希望更好地控制服务器设置或想要尝试更灵活的新功能,那么使用分层的组件可以帮助您实现目标- 无论是面向未来的部署还是需要引入第三方元素,例如缓存服务器。
水门
2018/08/07
4.1K0
Thin-film Bulk Acoustic Wave Technology
海大指南针
2022/05/16
2420
Thin-film Bulk Acoustic Wave Technology
GaAs Thin Wafer的强度提升探究
上几天研究了一下GaAs的抛光,其实化合物半导体的抛光都会面临薄晶圆强度小,晶圆有着天然的解离镜像,容易裂片的问题。
用户2760455
2022/11/15
6550
GaAs Thin Wafer的强度提升探究
Gentoo下Nginx+thin构建rails环境
使用emerage的话,需要在/etc/portage/package.keywords中加入
EltonZheng
2021/01/22
8710
unicorn在安卓中使用
https://github.com/RikkaApps/Riru/releases
tea9
2023/03/08
9430
使用Unicorn和Nginx在Ubuntu 14.04上配置Ruby on Rails应用程序
Ruby on Rails 是一个流行的 Web 应用程序框架,允许开发人员创建动态 Web 应用程序。本指南介绍如何在 Ubuntu 14.04 上使用Unicorn和 nginx 在服务器上部署Rails应用程序。
LPD6375
2018/08/29
7K0
4.7 服务器上的 Git - GitWeb
如果你对项目有读写权限或只读权限,你可能需要建立起一个基于网页的简易查看器。 Git 提供了一个叫做 GitWeb 的 CGI 脚本来做这项工作。
shaonbean
2019/05/26
9550
Kafka 生产与消费
接着上一篇博客,本篇主要介绍Kafka的生产与消费的过程。Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉去指定Topic的消息。
大鹅
2019/09/17
1.2K0
Kafka 生产与消费
使用 docker 作为 Web 开发服务器
提供一种思路,临时启动一个 nginx 容器作为服务器来开发前端应用,nginx 作为静态页面发布器,并可以代理远端 API。同时,我们也可以在 shell 中操作打开浏览器,并监控文件的改变并刷新浏览器。php,python 等脚本类的 web 开发也可以使用这个方法,只需要更换相应的 server 镜像作为容器运行的基础环境。
谢正伟
2020/06/08
3K0
POWER架构服务器作为计算节点
在power机器上安装计算组件,将power机器作为计算节点,并测试Openstack的基本功能。
后端云
2018/10/25
2K0
Linux 服务器使用git 作为仓库
https://www.cnblogs.com/JayYang/p/16436643.html
全栈测试开发日记
2023/02/02
1.4K0
与(&)、或(|)、异或(^) – 位运算详解
位运算,在平时的使用频率不是很高,大部分人都很少用到,以至于对位运算的理解也是比较模糊。
Yiiven
2022/12/15
1.7K0
与(&)、或(|)、异或(^) – 位运算详解
点击加载更多

相似问题

Rails 3.2.1登录Passenger、Thin或Unicorn

10

为什么此rackup文件适用于Thin,而不适用于WEBrick或Unicorn?

13

Rails在开发模式下为Webrick,在生产模式下为Thin

12

简单的Ruby服务器设置,使用Thin作为简单的rhtml服务器(如Webrick)

18

从WEBrick到Unicorn: Heroku上的Rails

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文