进程及进程进程信号的发送与接收

一、进程的创建与终止

1、进程创建   pid_t   pid  = fork();

进程具有进程编号类型为pid_t,接收创建进程的fork()函数返回的进程编号.

使用fork()函数创建的进程是与原本创建它的进程内容一致的,是其的一个副本,并在进程表中创建一个新的表项,新的表象中许多属性跟创建它的进程是相同的,新进程与原进程几乎一摸一样,执行代码也一样.

但是新进程具有自己独立的数据空间、环境与文件描述符.

创建子进程后:pid == 0  说明是子进程   pid<0进程创建失败

子进程返回值

2.exec系列函数

exec系列函数用于替换进程内容,将原本运行的进程内容替换为新的二进制内容执行

进程一般都会使用exec系列函数替换子进程中的内容来执行新的内容

3.父进程等待子进程函数; wait()

4、结束进程使用exit()

僵尸进程:

在子进程结束后,父进程尚未调用wait()函数之前的一段时期称子进程称作僵尸进程;僵尸进程只存在一个比较短暂的时间,当父进程调用wait()函数后,子进程数据空间、表项内容等将会释放.

孤儿进程:

如果父进程在子进程结束之前就结束了,子进程就称为孤儿进程.由于子进程占用一定的空间、表项,所以积累过多对系统性能产生影响,所有系统所有的进程的父进程init()会定期调用wait()来结束子进程.

init()进程是所有进程的父进程,如果其他子进程的父进程在结束其子进程之前结束,所有的孤儿进程将会由init()进程管理.


二、进程信号的发送与处理:

信号使系统为了响应某些条件而产生的一个事件,接收到该信号进程会产生一些行动;

信号是某些错误条件产生的,如内存段冲突、浮点处理、非法指令等,可以作为进程间传递消息或者修改行为的一种方式,明确的有一个进程发送给另一个进程。信号可以被生成、捕获、响应、忽略.

进程发送信号函数为kill(),将sig信号发送至pid所指的进程当中,成功发送时0

出错的可能性为:

1、进程不在

2、信号无效

3、没有权限

一般来说,相同的用户ID之间进程可以相互发送,超级用户可以给任何用户发送信号.

信号的处理函数:signal();

void (*signal(int sig,void (*func (int))(int);

signal函数具有两个参数,其返回值与第二个参数即信号处理函数返回值一样都为void 类型,并且其参数都是int类型.


关于alarm()函数,参数设定一个秒数,返回值是剩余的秒数,如果调用失败返回-1,alarm函数时间设定到达后会安排发送一个SIGALRM信号.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值