vfork 挂掉的一个问题】的更多相关文章

在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事. 我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案会被误导,所以就上去回答了一下这个问题. 下面我把问题和我的回答发布在这里,也供更多的人查看. 1 2 3…
http://coolshell.cn/articles/7965.html http://coolshell.cn/articles/12103.html#more-12103 前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下.这个题是这样的: 题目:请问下面的程序一共输出多少个“-”? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21…
很多人遇到过服务器RAID5挂掉,往往掉一个盘后,第二个盘也立刻挂掉. 大家都知道RAID5 一次允许一个盘缺失, RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上.这样,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据.硬盘的利用率为n-1. 如果挂掉两个盘,数据就玩完了.理论上两个硬盘同时失效的概率是很低的,但为什么会这样呢? 从数学角度说,每个磁盘的平均无故障时间 (MTBF) 大约为 50 万至…
转载 http://coolshell.cn/articles/12103.html 在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事. 我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案会被误导,所以就上去回…
fork和vfork 转载 http://coolshell.cn/articles/12103.html 在知乎上,有个人问了这样的一个问题--为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事. 我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案…
转载 http://coolshell.cn/articles/12103.html 在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事. 我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案会被误导,所以就上去回…
先看一个fork的例子: ; int main(void) { int var, pid; ; ) { printf("vfork error"); exit(-); } ) { /* 子进程 */ var++; glob++; exit(); } printf("pid=%d, glob=%d, var=%d\n", getpid(), glob, var); ; } 运行结果: [root@localhost tmp]# ./a.out pid=, glob=,…
vfork函数的调用序列和返回值与fork相同,但两者的语义不同. vfork用于创建一个新进程,而新进程的目的是exec一个新程序.vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit),于是也就不会存访该地址空间.相反,在子进程调用exec或exit之前,它在父进程的空间中运行. vfork和fork之间的另一个区别是:vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行.(如果在调用这…
vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,不会复制页表.因为子进程会立即调用exec,于是也就不会存放该地址空间.不过在子进程中调用exec或exit之前,他在父进程的空间中运行.为什么会有vfork,因为以前的fork当它创建一个子进程时,将会创建一个新的地址空间,并且拷贝父进程的资源,而往往在子进程中会执行exec调用,这样,前面的拷贝工作就是白费力气了,这种情况下,聪明的人就…
1. 进程标识符 在前面进程描述一章节里已经介绍过进程的两个基本标识符pid和ppid,现在将详细介绍进程的其他标识符. 每个进程都有非负的整形表示唯一的进程ID.一个进程终止后,其进程ID就可以再次使用了.如下是一个典型进程的ID及其类型和功能. 进程名:swapper (交换进程),进程ID:0,类型:系统进程,作用:它是内核的一部分,不执行磁盘上的程序,是调度进程. 进程名:init(init进程),进程ID:1,类型:用户进程 ,作用:永远不会终止,启动系统,读取系统初始化的文件. 进程…
主要函数: fork 用于创建一个新进程 exit 用于终止进程 exec 用于执行一个程序 wait 将父进程挂起,等待子进程结束 getpid 获取当前进程的进程ID nice 改变进程的优先级 --------------------------------- 孤儿进程: 如果一个子进程的父进程先于子进程结束,子进程就成为一个孤儿进程,他由init进程收养,成为init进程的子进程. #include <stdio.h> #include <stdlib.h> #includ…
atexit(设置程序正常结束前调用的函数) 相关函数 _exit,exit,on_exit 表头文件 #include<stdlib.h> 定义函数 int atexit (void (*function)(void)); 函数说明 atexit()用来设置一个程序正常结束前调用的函数.当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序. 返回值 如果执行成功则返回0,否则返回-,失败原因存于errno中. 范例 #i…
#include<stdio.h> #include<stdlib.h> #include<string.h> #include <unistd.h> #include<errno.h> #include <signal.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> // 演示 vfork // vfork共享父…
参见百度百科API说明: fork 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1 函数说明: 一个现有进程可以调用fork函数创建一个新进程.由fork创建的新进程被称为子进程(chi…
首先说一下fork和vfork的差别: fork 是 创建一个子进程,并把父进程的内存数据copy到子进程中. vfork是 创建一个子进程,并和父进程的内存数据share一起用. 这两个的差别是,一个是copy,一个是share. 你 man vfork 一下,你可以看到,vfork是这样的工作的,1)保证子进程先执行.2)当子进程调用exit()或exec()后,父进程往下执行. 那么,为什么要干出一个vfork这个玩意? 原因是这样的—— 起初只有fork,但是很多程序在fork一个子进程…
在linux系统中,许多进程在诞生之初都与其父进程共同用一个存储空间.但是子进程又可以建立自己的存储空间,并与父进程“分道扬镳”,成为与父进程一样真正意义上的进程. linux系统运行的第一个进程是在初始化阶段“捏造出来的”.而此后的线程或进程都是由一个已存在的进程像细胞分裂一样通过系统调用复制出来的,称为“fork()”或者“clone()”. 1.fork() 关于fork()和exec()的介绍在之前的一篇博文中做了介绍, 一个现有进程可以调用fork()函数创建一个新进程.由fork创建…
一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstrapping)过程结束时由内核调用.该进程的程序文件在UNIX的早期版本中是/etc/init,在较新版本中是/sbin/init.此进程负责在内核自举后启动一个UNIX系统.init通常读与系统有关的初始化(/etc/rc*文件),并将系统引导到一个状态(例如多用户).init进程决不会终止.它是…
现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞":deferred/promise方式则对使用者而言简洁明了,在执行异步函数之前就已经构造好了执行链--then链,而且实现也很灵活,具体可参考Promise的实现:事件机制则是一种观察者模式的实现,但也必须硬编码在异步执行的函数中,当异步函数执行完毕后再trigger相关事件,而观察者则相应执行事件处理函数…
转载请注明出处:http://www.cnblogs.com/xiaodf/ 1.测试环境 该benchmark用到了六台机器,机器配置如下 l  IntelXeon 2.5 GHz processor with six cores l  Six7200 RPM SATA drives l  32GB ofRAM l  1GbEthernet 这6台机器其中3台用来搭建Kafka broker集群,另外3台用来安装Zookeeper及生成测试数据.6个drive都直接以非RAID方式挂载.实际上…
工作原理: NameNode和DateNode,NameNode相当于一个管理者,它管理集群内的DataNode,当客户发送请求过来后,NameNode会 根据情况指定存储到哪些DataNode上,而其本身自己并不存储真实的数据.那NameNode怎么知道集群内DataNode的信息呢? DataNode发送心跳信息给NameNode. 写操作: 以下是直接从文档中摘抄下来的(利于理解): 有一个文件FileA,100M大小.Client将FileA写入到HDFS上. HDFS按默认配置. HD…
博文已转移,请借一步说话http://www.weixuehao.com/archives/596 简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Google 文件系统(中文,英文). HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复.默认存3份. ② 运行在廉价的机器上. ③ 适合大数据的处理.多大?多小?HDFS默…
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Google 文件系统(中文,英文). 1. 架构分析 基础名词解释: Block: 在HDFS中,每个文件都是采用的分块的方式存储,每个block放在不同的datanode上,每个block的标识是一个三元组(block id, numBytes,generationStamp),其中block id是具有…
[APUE]进程控制(上)   一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstrapping)过程结束时由内核调用.该进程的程序文件在UNIX的早期版本中是/etc/init,在较新版本中是/sbin/init.此进程负责在内核自举后启动一个UNIX系统.init通常读与系统有关的初始化(/etc/rc*文件),并将系统引导到一个状态(例如多用户…
本博客迁移到部署在jae上的独立博客系统wordpress,博客地址:点击打开独立博客.欢迎大家一起来讨论IT技术. 现在很多企业都在搭建自己的私有PAAS平台,当然也有很多大型互联网公司搭建共有PAAS平台(例如SAE/BAE/JAE(jae.jd.com)).那么使用PAAS平台来部署SAAS应用有哪些好处呢?除了大家都知道方便部署管理,节约资源和成本,今天我主要给大家介绍另一个好处就是让部署在PAAS平台上的应用很容易做到7×24小时不服务器运行(哪怕需要重新部署和更新应用),这个对于一般…
1.pid_t fork(); (1)当一个进程调用了fork 以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID 和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样. (2)为了区分父进程和子进程,我们必须跟踪fork 的返回值. 当fork 掉用失败的时候(内存不足或者是用户的最大进程数已到)fork 返回-1,否则fork 的返回值有重要的作用.对于父进程fork 返回子进程的ID,而对于fork 子进程返回0.我 们就是根据这个返回值来区分父子进程的…
在配置hbase集群将 hdfs 挂接到其它镜像盘时,有不少困惑的地方,结合以前的资料再次学习;  大数据底层技术的三大基石起源于Google在2006年之前的三篇论文GFS.Map-Reduce. Bigtable,其中GFS.Map-Reduce技术直接支持了Apache Hadoop项目的诞生,Bigtable催生了NoSQL这个崭新的数据库领域,由于map-Reduce处理框架高延时的缺陷, Google在2009年后推出的Dremel促使了实时计算系统的兴起,以此引发大数据第二波技术浪…
网站建立时间很长了,经常挂掉,又没有其他技术人员带.只好自己摸索着修复. 到今天网站已经挂掉了一个礼拜.请求各路大神无果后决定自己修复. 首先出现的是502,网关错误. 1.上阿里云服务用户中心重新启动了服务器.再次打开网站出现无法访问.连网关错误都没有. 2.查看nginx服务是否运行,使用PUTTY登录到服务器后台使用#ps -A | grep  nginx 命令,发现nginx服务未运行 . 3.启动nginx服务,查找nginx文件以及nginx.conf文件的位置,使用命令#find…
简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Google 文件系统(中文,英文). HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复.默认存3份. ② 运行在廉价的机器上. ③ 适合大数据的处理.多大?多小?HDFS默认会将文件分割成block,64M为1个block.然后将block按键值对存储在HDFS上,并将键…
HDFS(Hadoop Distributed File System ) HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Google 文件系统(中文,英文). 1. 架构分析 基础名词解释: Block: 在HDFS中,每个文件都是采用的分块的方式存储,每个block放在不同的datanode上,每个block的标识是一个三元组(block id, n…
  mysql集群架构图片 1.mysql企业常用集群架构 在中小型互联网的企业中.mysql的集群一般就是上图的架构.WEB节点读取数据库的时候读取dbproxy服务器.dbproxy服务器通过对SQL语句的判断来进行数据库的读写分离.读请求负载到从库(也可以把主库加上),写请求写主库. 这里的dbproxy是数据库集群的唯一出口所以也需要做高可用. drproxy是数据库读写分离的常用软件,amoeba.mycat.cobar也很常用.这类软件不仅带有读写分离功能,还可以实现负载均衡以及后端…