进程皆有资源限制
软硬限制
软限制可以被任意进程修改,<br>超过程序会提示异常
硬限制仅仅能被root修改,<br>受限于物理条件
软限制调整不可逆
常见限制
最大打开文件数
最大并发数
最大可创建文件大小
实践领域
性能压测,<br>需要跳转打开连接数
限制第三方软件资源调用,<br>防止被恶意占用
僵尸进程
父进程不调用wait,<br>子进程结束状态信息会被一直保留在内核,造成浪费
Z或者z,或者defunct都可以识别为僵尸
进程皆可互通
管道
可和子进程共享管道,用于父子通信
打开管道,<br>两个进程各持有管道的一边,<br>单向传递
系统调用
pipe
socketpair
send
生成终端进程
fork+exec 生成新进程取代子进程,<br>但是不能被恢复
exec不会关闭打开资源
fork+exec 会导致资源的一定消耗
一个更省成本的替代:posix_spawn,<br>但再也无法跟父进程共享资源
进程皆有文件描述符
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为父
进程皆可接收信号
信号投递不可靠
kill -l 获取到所有信号和对应的数字
信号由一个进程发送给另一个进程
kill和stop不可被捕捉和忽略,<br>因为能提供一个可靠的关闭程序方式
守护进程
后台运行,不受终端控制
守护进程的实现
进程组和会话组
会话组包含进程组,可发信号给旗下所有进程组
进程租包含一系列进程,向组长发信号,旗下的进程也会收到