[linux]进程控制——进程创建

news2024/10/7 12:28:51

一、fork:

在linux中fork函数从已存在进程中,创建一个新进程。新进程为子进程,而原进程为父进程。

返回值:子进程中返回0,父进程返回子进程id,出错返回-1。

1、常规用法:

一个父进程希望复制自己,使父子进程同时执行不同的代码段。例如,父进程等待客户端请求,生成子进程来处理请求。
一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数。

进程调用fork,当控制转移到内核中的fork代码后,内核执行以下内容:

  • 分配新的内存块和内核数据结构给子进程
  • 将父进程部分数据结构内容拷贝至子进程
  • 添加子进程到系统进程列表当中
  • fork返回,开始调度器调度

当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。

fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后,谁先执行完全由调度器决定。 

2、写时拷贝:

通常,父子代码共享,父子都不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝(重新申请空间,进行拷贝,修改页表)的方式各自一份副本。

注:

父进程创建子进程的时候首先将自己的读写权限改成只读,然后再创建子进程。

当用户对某一批数据进行写入时,页表转换会因为权限问题而出错。此时操作系统就可以介入:

1、真的出错了(如越界(尝试写入代码区等))

2、不是出错,触发:重新申请内存,拷贝内容的策略机制(写时拷贝)

二、补充:makefile文件

  1 cc=gcc
  2 src=test.c                                             
  3 target=mybin
  4 
  5 $(target):$(src)
  6   gcc $^ -o $@  -g #加上-g表示以debug模式编译该程序
  7 .PHONY:clean
  8 clean:
  9   rm -f $(target)
 10   

三、以模拟孤儿进程为例:

(以下包含进程创建)

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<stdlib.h>
  4 
  5 //模拟孤儿进程
  6 int main()
  7 {
  8   pid_t id = fork();
  9 

 10   if(id < 0)
 11   {
 12     return 1;
 13   }
 14   else if(id > 0)
 15   {
 16     int cnt = 5;
 17     while(cnt)
 18     {
 19       printf("这是父进程,运行时间:%d\n",cnt--);
 20       sleep(1);
 21     
 22     }
 23     printf("父进程dead!:%d\n",cnt--);
 24     exit(2);                                                                                                
 25   }
 26   else 
 27   {
 28     while(1)
 29     {
 30       printf("这是子进程,持续运行\n");
 31       sleep(1);
 32     }
 33 
 34 
 35   }
 36 
 37 
 38   return 0;
 39 }
 40 

四、监视:

执行以下命令:

未执行该模拟孤儿进程的程序时:

执行该模拟孤儿进程的程序:

父进程未退出时:

 可以看出父、子进程皆在运行,父进程PID是15379,子进程PID是15380,子进程的PPID是15379。

父进程退出后: 

可以看出,父进程已经不在运行,只有子进程在运行。此时,子进程的PPID不再是它原来父进程的 PID,而是变为了1。(这种情况可以理解为托孤)

此时如果我们不想让该进程继续运行,我们可以通过 kill -9 15380 终止该子进程。

五、创建多进程

1、myprocess.c

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>


#define N 10

void worker()
{
  int cnt = 10;
  while(cnt)
  {
    printf("我是子进程,pid: %d, ppid:%d ,cnt: %d\n", getpid(),getppid(), cnt);
    sleep(1);
    cnt--;
  }
}

typedef void (*call_back_t)();


void createSubProcess(int n ,call_back_t cb)
{
  int i = 0;
  for(i = 0; i < n; i++)
  {
    sleep(1);

    pid_t id = fork();

    if(id == 0)
    {
      printf("创建子进程:%d\n", i);

      cb();
      exit(0);
    }

  }
}
      
int main()
{
  createSubProcess(N, worker);

  sleep(100);

  return 0;
}

2、运行myprocess.c

 

 

3、监视

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1594534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【THM】Net Sec Challenge(网络安全挑战)-初级渗透测试

介绍 使用此挑战来测试您对网络安全模块中获得的技能的掌握程度。此挑战中的所有问题都可以仅使用nmap、telnet和来解决hydra。 挑战问题 您可以使用Nmap、 Telnet 和Hydra回答以下问题。 2.1小于10000的最大开放端口号是多少? 8080 nmap -p- -T4 10.10.234.218 2.2普通…

43岁百亿千金夫妇国外旅游高调放闪,羡煞好友马国明

萧正楠早前忙着拍摄TVB新剧《奔跑吧&#xff01;勇敢的女人们》&#xff0c;剧集煞科后他即和老婆黄翠如一起到意大利旅行。两公婆分别在IG大晒旅行靓相&#xff0c;甜蜜满泻。 这次萧正楠的旅游照都是由翠如亲自操刀拍摄&#xff0c;相中所见&#xff0c;萧正楠在广场大摆Chok…

个人笔记目录

目录 一、lora 微调 alpaca 笔记 二、全量微调 Llama2-7b笔记 三、Huggingface trainer 与 from_pretrained简单介绍&#xff08;笔记&#xff09; 四、vscode调试launch.json常用格式 五、huggingface generate函数简介 六、Trl: llama2-7b-hf使用QLora 4bit量化后ds zer…

Linux —— FTP服务【从0-1】

目录 一、介绍 1.概述 2.FTP的传输模式 PORT 主动模式 PASV 被动模式 3.FTP服务的作用 二、搭建FTP服务器 FTP服务端配置 1.安装vsftpd文件服务 2.启动服务 3.防火墙配置 4.FTP服务相关文件说明 FTP客户端配置 1.安装FTP客户端工具 lftp 2.访问FTP服务器 Linux系…

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—更新(正式比赛)

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—更新&#xff08;正式比赛&#xff09; 往期链接&#xff1a; 【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程&#xff08;…

Java集合(一)--Map(2)

ConcurrentHashMap与HashTable 底层实现 在JDK1.7时&#xff0c;底层采用的是分段数组&#xff0b;链表的形式&#xff0c;在JDK1.8之后&#xff0c;采用的是与HashMap相同的形式&#xff0c;数组链表/红黑树。而HashTable采用的是数组链表的形式。 如何实现线程安全 Concu…

QT助手翻译【QT 5.14】 -----QPushButton

目录 1 属性 2 公共职能 3 重新实现的公共功能 4 公用插槽 5 受保护的功能 6 保护方法 7 详细说明 1 属性 自动默认值&#xff1a;bool 此属性保存按钮是否为自动默认按钮 如果此属性设置为true&#xff0c;则该按钮为自动默认按钮。 在某些GUI样式中&a…

Google Imagen 2对比OpenAI的Dall-E 3 - 同一提示,不同结果

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

超市商场客户细分项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 项目背景 在竞争激烈的商业环境中&#xff0c;了解和满足客户的需求是任何成功商场的关键要素。为了更好地理解我们的客户并制定有针对性的营销…

网页布局再次复现

华子目录 普通文档流布局table布局table布局的不足之处 浮动布局浮动优点浮动用途 定位布局相对定位特点&#xff1a; 绝对定位特点&#xff1a; 固定定位 divcss布局div盒子模型标准盒子模型div盒子组成注意 CSS弹性盒子CSS3 弹性盒子常用属性flex使用三要素flex-direction设置…

5.9 mybatis之callSettersOnNulls作用

文章目录 1. 当callSettersOnNullstrue时2. 当callSettersOnNullsfalse时 在mybatis的settings配置参数中有个callSettersOnNulls参数&#xff0c;官方解释为&#xff1a;指定当结果集中值为 null 的时候是否调用映射对象的 setter&#xff08;map 对象时为 put&#xff09;方法…

SecureCRT日志记录的7个经典配置记录与14个环境变量(%Y-%M-%D_%H_%S_session.log %t )

每次更换电脑、主机或者环境都需要配置一遍SecureCRT的参数。感觉就最近十年都已经设置过上百次了。其实设置没什么特别的&#xff0c;只是经过不断地打磨&#xff0c;主打的就是一个经济实用。经常忘记&#xff0c;特此记录。 配置方式 建议直接配置默认session&#xff1a;…

error:0308010C:digital envelope routines::unsupported(问题分析)

error:0308010C:digital envelope routines::unsupported 情况一&#xff1a;就是网上大部分人说的node 17版本的问题 出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制&#xff0c;可能会对生态系统造成一些影响…

宝妈如何在家创造收入?五种兼职工作让你轻松赚钱!

许多宝妈为了陪伴孩子成长&#xff0c;毅然选择了全职妈妈的角色&#xff0c;然而&#xff0c;她们内心仍希望能有一份收入&#xff0c;实现经济独立。于是&#xff0c;寻找既能照顾家庭又能赚钱的工作成了她们的迫切需求。 然而&#xff0c;这样的需求也往往让宝妈们成为一些…

策略为王股票软件源代码\StkUI\View\BaseView.cpp-------显示股票基本资料的视图-------程序代码都在里面了

CString strHeader info.GetStockCode(); strHeader " "; /修改 strHeader info.GetStockName(); strHeader "\r\n\r\n "; GetEditCtrl().SetWindowText( strHeader ); GetEditCtrl().SetSel…

寻找心灵慰藉:这些平台上有最好的解压视频

在这个快节奏的社会中&#xff0c;解压视频成为了我们放松心情的小帮手。这些视频通常具有令人着迷的视觉效果和舒缓的背景音乐&#xff0c;能够帮助我们暂时脱离紧张的工作或生活状态。如果你正在寻找这样的视频&#xff0c;以下几个平台可以满足你的需求&#xff1a; 蛙学网…

AI在运维实践中的价值提升

在2024年的AI赛道上&#xff0c;利用大数据 、机器学习算法、人工智能来改善运维效率已成为软件运营商发展的新主张&#xff0c;通过AI在运维流程的洞察、决策和执行&#xff0c;从而提升效率、减少故障时间&#xff0c;优化用户体验。通过分析大量数据来识别趋势和模式&#x…

免费VPS云服务器汇总,最长永久免费使用

目前云服务器市场竞争很激烈&#xff0c;为了方便吸引上云&#xff0c;很多云计算服务商提供免费试用云服务器&#xff0c;下面给大家整理汇总一下免费VPS云服务器&#xff0c;最长永久免费使用&#xff01; 一、雨云&#xff08;优惠码:ABC&#xff09; 活动地址&#xff1a;…

Python爬虫-京东商品评论数据

前言 本文是该专栏的第68篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者有详细介绍京东滑块验证码的解决方法,感兴趣的同学,可以直接翻阅文章《Python如何解决“京东滑块验证码”(5)》进行查看。 而本文,笔者以京东商品详情页的评论数据为例,通过…

直播弹幕系统设计

本文仅提供思路参考&#xff0c;并非完备的详细设计。 特点 其实很类似IM即时通讯系统&#xff0c;是个变种&#xff0c;本质也是在一个空间内收发消息 消息及时性强&#xff0c;过期消息意义不大用户松散&#xff0c;随时来随时走可能有瞬时大批量弹幕&#xff08;比如比赛精…