搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
凡人多烦事01
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
GEE:为机器学习方法(随机森林、支持矢量机等)添加时间序列特征_gee|基于时间序列特征的山东省玉米随机森林分类代码
2
java毕业设计权益会员管理源码+lw文档+mybatis+系统+mysql数据库+调试_mysql视频系统会员表设计
3
Linux发展史&目录结构&Vim编辑器
4
Gradle 构建工具 #3 Maven 发布插件使用攻略(以 Nexus / Jitpack 为例)_android-maven-gradle-plugin
5
Android studio在真机上进行调试设置步骤(以荣耀20(HONOR20)为例)_华为荣耀链接android studio
6
linux服务器探针,一个已经断更的Linux云探针:ServerWatch
7
Trunk_以太网帧双层tag
8
笔记-基于Lie群SE(3)的航天器姿轨一体化建模方法_se3群
9
C#零相位数字滤波器,改写自Matlab函数filtfilt_零相位滤波器是什么 csdn
10
从动物科学到乐队鼓手,腾讯技术小哥的开源人生_spinnaker 实战:云原 多云环境的持续部署方案
当前位置:
article
> 正文
linux进程系统调用_linux创建进程的系统调用
作者:凡人多烦事01 | 2024-03-20 12:03:06
赞
踩
linux创建进程的系统调用
一、fork
函数
刚才为什么子进程
ppid=1?
收尸的问题
第
1
种情况就是父进程先死
,
所以交给
bash
收
,
而
bash
是一个
shell
有命令提示符所以每行都有子进程跟在后面输出。
第
2
种情况是父进程运行时休眠了
1
秒
,
子进程先运行结束
,
父进程收尸
,
当父进程结束
bash
给收尸就会打印出命令提示符。
其实第
1
种情况
,
父子进程同时运行到底谁先谁后不确定
,
第
2
种情况用软件来控制。一般情况同一个程序运行父子进程就是这种形式了。
f ork的特点:
1.调用
1
次返回
2 次,一分为二,父子进程各自分离,返回的是不同的值,后续各自独立运行自己的代码;
2.fork 时子进程会“复制”一份父进程的所有的代码;
3.fork 返回到底先执行哪一个进程是不确定;
写操作时拷贝:
由于 fork 完整地拷贝了父进程的整个地址空间,因此执行速度是比较慢的。为了提高效率,创建新进程, 但它不产生父进程的副本。它通过允许父子进程可访问相同物理内存从而伪装了对进程地址空间的真实拷贝,当子进程需要改变内存中数据时才拷贝父进程。这就是著名的“写操作时拷贝”(copy-on-write)技术。
扩展学习:
pid =0 :称为交换进程(
swapper)
作用: 进程调度
pid=1 :
init 进程
作用: 系统初始化
Linux 内核启动之后,会创建第一个用户级进程
init,由上图可知,
init 进程
(pid=1)
是除了
idle
进程
(pid=0,
也就是 init_task)
之外另一个比较特殊的进程,它是
Linux
内核开始建立起进程概念时第一个通过 kernel_thread
产生的进程,其开始在内核态执行,然后通过一个系统调用,开始执行用户空间的 / sbin/init 程序。
二、vfork
函数
由于
fork
完整地拷贝了父进程的整个地址空间,因此执行速度是比较慢的。为了提高效率,有些
Unix
系统 设计者创建了 vfork
。
vfork
也创建新进程,但它不产生父进程的副本,子进程不将父进程地址空间完全复制到子进程中,
而是共享的
,因为子进程会立即调用
exit
(或
exec
)后,也就不会存放该地址空间。
例如:很多嵌入式
Linux
系统的
fork
函数调用都采用
vfork
函数的实现方式。实际上
uClinux
所有的多进程管理都通过 vfork
来实现。
用
vfork()
有个特点必须在父进程和子进程末尾加
exit
函数结束
与
fork
区别
1) fork()
执行后两个进程同时执行
,
而
vfork
有先后顺序;
2)
子进程会先于父进程执行
,
前提子进程创建成功;
3)
子进程不将父进程地址空间完全复制到子进程中;
4)
记得加入
exit()
有先后顺序用它来结束
,
否则会有
core dump;
什么是core dump?
core dump
当一个进程要异常终止时
,
可选择把进程的用户空间内存数据全部保存在磁盘上
,
文件名通常是
core,
这叫
Core Dump.
进程异常终止通常是因为有
Bug
,比如非法内存访问导致段错误,事后可以用调试器检查
core
文件以查清错误原因,这叫做
Post-mortem Debug
。一个进程允许产生多大的
core
文件取决于进程的
Resource
Limit
(这个信息保存在
PCB
中)。默认是不允许产生
core
文件的,因为
core
文件中可能包含用户密码等敏感信
息,不安全。在开发调试阶段可以用
ulimit
命令改变这个限制,允许产生
core
文件。
三、exec
函数家族
exec
函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。
可执行文件既可以是二进制文件,也可以是任何
Linux
下可执行的脚本文件。
有
6
个函数 参数类型含义个数不同
,
有共同前缀
exec
区别:l, lp, le, v, vp, vpe
参数分为
2
个部分;
第
1
个参数
path
或
file
寻找程序的方式;
第
2
个参数 加载程序执行的命令;
l/v
表示第
2
个参数不同的;
l
表示以列举方式传参;
v
表示以数组方式传参;
在一个进程空间中加载另一个程序,一般和 fork
一起用,
共享代码段,
执行同样的程序,创建进程希望干别的事情,
不是做同样的事情。
四、exit
和
_exit
函数
exit 和
_exit
函数 功能都是结束进程
exit:
1)刷新缓冲;
2)释放缓冲区;
3)清理现场结束进程;
注意: return
会实现和
exit()
相同的功能;
_exit:
直接结束当前进程;
不去处理现场;
五、wait 函数
调用该函数使进程阻塞,直到任一个子进程结束或者是该进程接收到了一个信号为止。如果该进程没有子进程或者其子进程已经结束,wait
函数会立即返回。
用法1:
.
给子进程收尸使当前进程阻塞;如果调用 wait()
的函数没有子进程则立即返回。
用法2:
用宏来测试拿到子进程
exit()
函数返回值。
不能给多个进程收尸
?
https://blog.csdn.net/qq_43471489/article/details/125232557
六、
waitpid
函数
waitpid
函数功能和 wait
函数类似。可以指定等待某个子进程结束以及等待的方式(阻塞或非阻塞) ;waitpid 函数比较复杂用的不多给指定进程收尸。
pid
参数:pid 有
4
个值
pid>0 给指定进程 pid
的子进程收尸
pid=-1 类似 wait
函数
pid=0 等待 当前进程组(
用户组一样
)
进程组
1
有
2
个进程
p1,p2
进程组
2
有
2
个进程
p3,p4
同一个进程组里面任意进程例如
进程组
2
里面
p3
或
p4
pid=-1
只能给进程
p1
即使同一个组
p2
也不能
pid<=1:
给指定进程组里面的进程收尸
option
参数
0:
阻塞
(
一般传
0
即可
wait
目的就是收尸
)
WNOHANG
不阻塞
WUNTRACED
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/凡人多烦事01/article/detail/273229
推荐阅读
article
写给
Android
初学者
的
基础总结(一)——
Android
的
概述_
android
继承
于
linux
...
Android
简介2003年10月,Andy Rubin等人一起创办了
Android
公司。2005年8月谷歌收购了这家仅...
赞
踩
article
【
Linux
】指令 【
scp
】...
在这个过程中,数据传输是加密的,可以防止未经授权的访问。是一条用于安全复制文件的命令。这条命令的含义是将本地的。【Lin...
赞
踩
article
linux
nginx
启动
文件
位置,
查看
程序
启动
目录、运行中的配置
文件
目录
nginx
...
Linux环境下,怎么确定Nginx是以谁人config
文件
启动
的?输入下令行: ps -ef | grep
nginx
...
赞
踩
article
Linux
网络
虚拟
化
IPvlan
(共享Mac
地址
的
虚拟
网络
接口) 认知...
博文内容涉及
IPvlan
的简单认知,以及一个 Demo博文内容根据《 Kubernetes
网络
权威指南:基础、原理...
赞
踩
article
【
linux
】
进程
和
线程
的
几种
状态
及
状态
切换
_
linux
线程
状态
...
进程
和
线程
的
状态
_
linux
线程
状态
linux
线程
状态
文章...
赞
踩
article
linux
系统
编程
用的是
c
语言
,
Linux
系统
编程
练手项目:使用C
语言
实现协程...
协程是最近几年比较火的一个概念,尤其是在互联网后台、手机游戏后台等场景中被大量使用。它跟我们经常使用的进程、线程有什么区...
赞
踩
article
Linux
C语言
实现
协程
功能_
makecontext
参数...
协程
,作为go语言的亮点,可以实现用户在用户层面根据业务实际情况来实现进程切换。但是由于
C语言
才是运行速度最快的语言,并...
赞
踩
article
基于
Linux
u
c
ontext 函数族实现的 简易的,
非对称
的
协程库
_
linux
c
协程库
...
基于
Linux
u
c
ontext 函数族实现的 简易的,
非对称
的
协程库
_
linux
c
协程库
linux
c
协程库
...
赞
踩
article
Linux
|
时间
片
和
上下文
切换
_
linux
设置线程
时间
片
...
这就导致处理器需要更加频繁地
切换
上下文
并执行不同的进程,从而使得被动的
上下文
切换
次数激增(system time 激增)...
赞
踩
article
Linux
终于有人把
CPU
上下文
切换
说清楚了_
上下文
切换
时会删除工作
内存
吗...
前言多个进程竞争
CPU
就是一个经常被我们忽视的问题。进程
CPU
的时候并没有真正运行,为什么还会导统的负载升高呢?你应该已...
赞
踩
article
android
linux
最全的
基础知识
总结_
ccflag
和
asflag
-o1是
什么
...
===================================================
linux
,A...
赞
踩
article
【
Linux
】---
Linux
编译器
-
gcc
/g
++
、调试器-
gdb
、项目自动化构建工具-
make
...
Linux
编译器
-
gcc
/g
++
、调试器-
gdb
、项目自动化构建工具-
make
/
Makefile
使用【
Linux
】--...
赞
踩
article
使用
3CDaemon
进行
ftp
传输
文件
(
linux
->开发板) 的方法_
3cdaemon
li...
1, 下载打开
3CDaemon
.EXE 该软件可以支持t
ftp
ftp
等服务,界面如下: 2 添加新的用户,设置密码...
赞
踩
article
Linux
安装使用
Docker
...
我们可以从中央仓库下载一个镜像,也可以自己手动去制作一个镜像,需要通过
Docker
file去指定自定义镜像的信息创建自定...
赞
踩
article
linux
apt
get
镜像
,快速搭建本地
Ubuntu
APT源
镜像
? Hey! Linux....
Ubuntu
10.10 已经被抛弃了!就是在昨天,
Ubuntu
的官方站点security.ubuntu.com和arc...
赞
踩
article
linux
/
dev
/
sda1
磁盘满了,解决办法...
一开始系统报“no space left on
dev
ice”(磁盘空间不足),然后本来带桌面的ubuntu系统变成只能...
赞
踩
article
【
Linux
】
alias
及
设置
_
linux
alias
怎么
设置
...
一、简介
linux
alias
是命令的一种别称,输入
alias
可以看到像下面这样的结果:
alias
vi="vim"也...
赞
踩
article
Linux
(Ubuntu):
文件系统
挂载
mount
与卸载u
mount
、U盘挂载与卸载、
镜像文件
挂载与...
文章目录
文件系统
挂载
mount
与 卸载u
mount
1、U盘 挂载与卸载2、
镜像文件
挂载与卸载3、系统自动挂载/et...
赞
踩
article
linux
/
dev
/
sda1
磁盘空间
爆满修复绝招_
linux
dev
目录
满了...
可以看到root
目录
就占用了59G,使用du -h查看空间占用只能看到一些大小很小的文件,这里就产生了疑惑,为啥显示ro...
赞
踩
article
Linux
:
Ubuntu
/
Deepin
刚装完系统就无法开机:
unable
to
mount
root
...
进入后第一件事先找出自己的/boot目录,如果你的分区是把boot单独分一个区的话,应该记得它的大小,我是直接分的根分区...
赞
踩
相关标签
android
内核
安卓
java
程序人生
linux
linux nginx 启动文件位置
网络
macos
服务器
linux 系统编程用的是c语言
c语言
运维
c++
学习
数据结构
时间片
上下文切换
context switch
system
build
service
include