# linux系统编程及基本命令

linux系统编程及基本命令


系统编程

基本命令

按下开机键Linux发生了什么

BIOS -> MBR -> 引导加载程序 -> 内核 -> init process -> login

进程退出方式及区别

不管哪种退出方式,系统最终都会执行内核的同一代码,这段代码用来关闭进程打开的文件描述符,释放它占用的内存和其他资源

  • 退出

    • 正常退出
      • main函数调用return
      • 调用exit()函数
      • 调用_exit()函数
    • 异常退出
      • 调用abort函数
      • 进程收到某个信号,该信号使程序终止
  • 已结束进程的状态

    • shell执行 echo $?,保存最近一次运行的进程的返回值
      • 程序中main函数运行结束,保存main函数的返回值
      • 程序调用exit函数结束运行,保存exit函数的参数
      • 程序异常退出,保存异常出错的错误号
  • 区别

    • exit和return的区别
      • exit是函数,有参数,exit执行完会把控制权交给系统,exit(0)表示正常终止,其他值表示有错误发生
      • return是函数执行完后的返回,return执行完后把控制权交给调用函数
    • exit和abort的区别
      • exit是正常终止进程
      • abort是异常终止进程
    • exit和_exit函数的区别
      • exit在头文件stdlib.h中声明,_exit是在头文件unistd.h中声明
      • exit是_exit之上的一个封装, exit先刷新流数据 ,再调用_exit函数
        • _exit会关闭进程打开的文件描述符,清理内存,不会刷新流数据
        • linux的库函数,有一种“缓冲IO”的操作,对应每一个打开的文件,在内存中有一片缓冲区,每次读文件,会连续读出若干条记录,下次再读文件的时候,直接从内存的缓冲区中读;同样写文件也是先写入缓冲区,满足一定条件才将缓冲区的内容一次性写入文件。具体可以看printf和write的区别,及行缓冲和全缓冲
        • exit先刷新流数据,将文件缓冲区的内容写回文件,可以保证数据的完整性,_exit会将数据直接丢失

回收进程资源的方式和区别

  • init进程(进程号为1)会周期性的调用wait系统调用来清除各个僵尸进程
  • wait
    • pid_t wait (int *status) status表示子进程的退出状态,成功返回值为子进程进程号,失败为-1
    • 进程一旦调用wait函数,立即阻塞自己, 判断当前进程的某个子进程是否变成僵尸进程
      • 若存在则收集子进程的信息,将它彻底销毁然后返回
      • 若没有,则会一直阻塞,直到出现一个
  • waitpid
    • waitpid相当于wait函数的封装,多了两个由用户控制的参数pid和options,可以自定义回收的子进程进程号,并设置是否阻塞
    • pid_t waitpid(pid_t pid, int * status, int options)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清梦旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值