理解Unix进程
2019-01-28 15:03:13 0 举报
AI智能生成
<<理解unix进程>>脑图
作者其他创作
大纲/内容
进程皆有父
系统调用
getppid
进程皆有资源限制
软硬限制
软限制可以被任意进程修改,<br>超过程序会提示异常
硬限制仅仅能被root修改,<br>受限于物理条件
软限制调整不可逆
常见限制
最大打开文件数
最大并发数
最大可创建文件大小
实践领域
性能压测,<br>需要跳转打开连接数
限制第三方软件资源调用,<br>防止被恶意占用
系统调用
getrlimit
setrlimit
进程皆有环境
子进程继承父进程环境变量
环境对于进程是全局的
作用
作为命令行程序的输入
系统调用
setenv
getenv
进程皆有退出码
范围通常是0~255
0通常表示正常退出,<br>非0表示不同异常
系统调用
exit
abort
raise
exit!
孤儿进程
父进程于子进程结束前结束
init会收养孤儿进程
僵尸进程
父进程不调用wait,<br>子进程结束状态信息会被一直保留在内核,造成浪费
Z或者z,或者defunct都可以识别为僵尸
进程皆可互通
管道
可和子进程共享管道,用于父子通信
打开管道,<br>两个进程各持有管道的一边,<br>单向传递
套接字
可双向通信
tcp
mq
系统调用
pipe
socketpair
send
生成终端进程
fork+exec 生成新进程取代子进程,<br>但是不能被恢复
exec不会关闭打开资源
fork+exec 会导致资源的一定消耗
一个更省成本的替代:posix_spawn,<br>但再也无法跟父进程共享资源
进程皆有标识
系统调用
getpid
概念
进程的唯一标示符号
$$
当前pid
进程皆有文件描述符
unix一切都是文件
进程关闭,资源也会被关闭
描述符id可以重用
三个默认fd:0(stdin),1(stdout),2(stderr)
跟踪打开的资源
作用
文件操作的核心
管道和网络编程的核心
系统调用
open
close
read
write
pipe
fsync
stat
进程皆有参数
参数可以从外部传入程序
进程皆有名
运行期可以被修改
进程皆可衍生
子进程继承父进程的内存中所有内容,<br>以及所有打开的文件描述符
ppid就是fork前的进程id
写时复制,子进程仅在需要修改副本时候才会把真实内容复制到进程,<br>否则将和父进程共享读
fork返回两次,pid等于0是子,大于0为父
系统调用
fork
进程可待
系统调用
master/worker
衍生多个并发的子进程,<br>并等待其退出
系统调用
wait
wait2
waitpid
进程皆可接收信号
信号投递不可靠
kill -l 获取到所有信号和对应的数字
处理方式
默认
忽略
捕捉并定义hanlder
信号由一个进程发送给另一个进程
常见信号
term
立即结束
int
中断
kill
杀死
stop
停止
usr1
自定义
usr2
自定义
cont
继续
chld
子进程结束
hub
由控制终端终止时发出
kill和stop不可被捕捉和忽略,<br>因为能提供一个可靠的关闭程序方式
作用
进程通信
捕捉信号来做优雅重启等操作
系统调用
kill
singal
raise
守护进程
后台运行,不受终端控制
守护进程的实现
进程组和会话组
会话组包含进程组,可发信号给旗下所有进程组
进程租包含一系列进程,向组长发信号,旗下的进程也会收到
0 条评论
下一页