linux系统编程小结

程序和进程的区别

  1. 程序是编好的二进制文件,在磁盘上不占用内存,cpu等系统资源
    进程是程序运行一次的过程,占用cpu和内存等系统资源
  2. 一个程序可以有多个进程,但是一个进程只属于一个程序

并发和并行的区别

并发是在一个cpu上利用时钟中断,模拟多个程序同时进行的效果
并行是有多个核,每个核上有不同的线程在运行,是真正的同时运行

fork函数

  1. 头文件
    <sys/types.h>
    <unistd.h>
  2. 函数原型
    pid_t fork()
    返回值:
    等于0:返回的是子进程
    大于0:返回的是父进程的id
    小于0:函数执行失败
    注意:如果是想用for循环开多个进程,需要在子进程中break,不然子进程也会执行for中内容

父子进程区别

相同处:子进程会复制父进程的堆,栈,数据段,代码段,全局变量区,环境变量等(遵循读时共享,写时复制)
不同处:进程id,fork返回值,父进程id,进程运行时间,定时器,未决信号集

exec函数族

这里介绍俩个重点学的,所有的exec函数族都是调用execve的系统函数去完成调用(成功无返回,失败返回-1)
int execl("./fork",“fork”,NULL):第一个参数规定路径以及程序名,第一个参数调用的程序名,最后没有参数就以NULL结尾
int execlp(“ls”,“ls”,"-l",NULL):第一个参数因为是用的系统环境变量路径就不用在前面再加路径,直接写方法名,后面于第一个方法使用相同

孤儿进程

  1. 产生原因:父进程在子进程前结束,这是孤儿进程会交于系统的init进程管理,并回收相关的资源
  2. 解决办法:孤儿进程会交由系统进程管理,因此不会产生垃圾,但是为了防止init进程管理的孤儿进程数量过大可能会崩溃,因此可以最好还是调用wait管理

僵尸进程

  1. 产生原因:父进程在子进程终止时,没有回收相关资源,在程序结束时系统会回收程序堆栈等资源,但是在内核中的pcb还保留着,以及程序正常退出则保留着程序退出的状态,如果程序异常终止,则保留着导致进程终止的信号是哪个
  2. 处理方法:
    杀死父进程,他会被交由init进程管理。
    wait方法:阻塞父进程,并清理子进程在内核的存储,获取退出状态
    waitpid:可以设置非阻塞回收
    用进程退出时产生的SIGCHLD信号,对该信号进行处理回收内核资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值