进程学习(四)

1、时序竞态(竞态条件)

pause()函数:调用该函数可以导致进程挂起,等待信号唤醒

解决时序问题:sigsuspend(const sigset_t* mask)挂起等待信号

信号不可靠性

2、全局变量异步I/O:加锁

3、可/不可重入函数

定义可重入函数:函数内部不能含有全局变量和static变量,不能使用malloc,free

信号捕捉函数应该设计为可重入函数

信号处理程序可以调用的可重入函数参考 man 7 signal

没有包含上述函数的大多属于不可重入函数,究其原因:

使用全局变量、调用了malloc/free、是标准的I/O函数

4、SIGCHLD信号

产生条件:子进程终止,子进程接收到SIGSTOP信号停止时,子进程处在停止态,接受到SIGCONT后唤醒

5、信号传参

sigqueue

6、中断系统调用

系统调用分类:

1)慢速系统调用

2)其他系统调用

7、终端

ttyname()由文件描述符求文件名

8、进程组

getpgrp

getpgid

setpgid

8、会话

1、调用进程不能是进程组长,该进程变成新会话进程(seesion header)

2、该进程成为一个新进程组的组长进程

3、需用root权限

4、新会话会丢弃原有的控制终端,该会话没有控制终端

5、该调用进程是组长进程,则出错返回

6、建立新会话时,先调用fork、父进程终止,子进程调用setsid

getsid

9、守护进程

在后台服务进程、独立于控制终端并周期性的执行某种任务或等待处理某些发生的事件

创建守护进程:最主要:调用setsid()

第一步:创建子进程fork()

第二步:子进程创建新会话 setsid()

第三步:改变进程工作目录位置:chdir()

第四步:指定文件掩码 umask()

第五步:将文件描述符0/1/2关闭或者重定向

第六步:守护进程主逻辑

第七步:退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值