Linux -- 进程控制

进程控制相关的头文件一般都是 <unistd.h>

进程创建

进程创建简单的来说就是创建一个PCB。使用 fork 库函数。

pid_t fork();
pid_f vfork(void);

fork — 通过复制调用进程也就是父进程的PCB来创建一个新的子进程。fork的返回值是:父进程返回子进程的PID,子进程返回0,若创建失败返回-1.
vfork — 创建子进程,父子进程公用一个虚拟地址空间。
父子进程公用一个虚拟地址空间的作用是为了防止调用栈混乱,具体实现是:使父进程调用vfork之后就一直阻塞,一直阻塞到子进程退出 或者 子进程发生程序替换。返回值和fork一样。
vfork创建的子进程不能用return退出,只能用exit。
因为fork加入了写时拷贝技术之后,vfork创建子进程的高效率的地位被取代,vfork也就慢慢被淘汰。写时拷贝技术提高子进程的效率,避免了无谓的开辟空间。
fork 和 vfork再内核中创建进程都是调用 clone函数实现PCB创建并拷贝数据。
fork 调用失败的原因:
1. 系统中存在太多的进程;
2. 实际用户进程数超过了限制。
通常使用fork创建子进程之后,可以通过返回值的不同使用if分流,分辨出父子进程。
进程终止
进程终止就是退出进程,进程退出分为两种:1.正常退出,结果符合或者不符合预期退出;2.异常退出:常见的异常退出就是程序奔溃。
关于进程退出的方法:

  1. main 函数中的return;
  2. 两种exit函数,通常使用的都是库函数中的exit(), 另一个是系统调用接口中的_exit();
  3. 异常退出:Linux下使用ctrl + c,信号终止。
void exit(int status);   //库函数中的exit
//status是进程终止状态,父进程通过wait来获取该值

return 和 exit() 两种方式都会在退出之前刷新缓冲区,return 通常在main中退出进程,而exit可以在任意地方使用。

void _exit(<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值