美文网首页
linux高级环境编程--进程

linux高级环境编程--进程

作者: lifesmily | 来源:发表于2017-06-23 21:08 被阅读22次

进程

进程间通信机制

信号

参考 https://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html

进程间通信 --管道

参考
https://liwei.life/2016/07/18/pipe/

进程环境

c函数总是从main函数开始执行,调用main之前先调用一个特殊的启动例程,该启动例程从内核取得命令行参数和环境变量,然后运行main。

进程终止

有以下八种方式


image.png

exit 和 _exit 、_Exit函数都是正常终止一个进程,后面两个会立即进入内核,而exit则先执行一些清理工作。还涉及一个终止状态,即进程退出的退出状态,如exit(5)。

登记函数 atexit()

一个进程可以登记最多32个函数,由exit()自动调用。调用顺序和登记顺序相反,类似线程的cleanup_push和cleanup_pop函数。
但稍有不同就是进程只有注册,待用由exit()负责,不用pop。注意exit(0)和return 0效果是一样的。

image.png

上图为C程序启动和终止的过程。

环境表和环境变量
image.png

环境指针是一个二级指针。
环境字符串形式:name = value

image.png

除了获得变量值还有设置变量值。具体函数为 putenv 、setenv、unsetenv。具体查阅。

setjmp和longjmp

类似于goto,但是goto不能跨越函数,适用于局部跳转。而setjmp和longjmp主要用于嵌套出错中,比如A调用B,B调用C,C运行发生了一个非致命性错误需要从A重新运行,若逐层返回很麻烦,上面两个函数闪亮登场。
以下为示例,setjmp参数为特殊类型的jmp_buf。存放恢复栈状态的所有信息,longjmp第二个参数为返回值,区分不同的返回。


image.png

在这个情况下,有个很重要的问题需要去考虑,即哪些变量会恢复到以前。

C程序存储空间布局
空间布局

正文段是CPU执行的机器指令部分,正文段可共享(如很多shell但共享一个正文段),正文段只读。
初始化和未初始化就看程序中对变量有没有赋初值,未初始化的也叫 bss段,一般初始化为0.
栈,自动变量以及函数调用所需保存的信息存放处。堆用来动态分配内存。

存储空间分配
image.png

进程控制

进程标识

ID为0的进程通常是调度进程,是内核一部分,不执行任何磁盘上程序,ID为1为init进程,自举过程后由内核调用。

标识符函数
fork

fork调用之后,子进程是父进程的副本,例如子进程获得父进程数据空间、堆和栈的副本,父子进程之间并不共享,但是一般共享正文段。

image.png

相关文章

  • linux高级环境编程--进程

    进程 进程间通信机制 信号 参考 https://www.ibm.com/developerworks/cn/li...

  • linux高级环境编程--守护进程

    基本概念 Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务...

  • Linux高级环境编程

    1. 编译的四个步骤: 预处理gcc -E test.c -o test.i 编译:将高级语言编译成汇编语言gcc...

  • 孤儿进程与僵尸进程

    孤儿进程与僵尸进程[总结] 1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直...

  • linux高级环境编程-高级IO

    本文主要理清非阻塞IO,记录锁,IO多路转接,异步IO,readv和writev函数以及存储映射IO。学习 1、同...

  • linux高级环境编程-线程

    线程 在单进程环境下使用多线程执行多个任务。一个进程的所有线程可以访问该进程的资源。当然也需要涉及处理一致性问题。...

  • Linux环境高级编程基础

    Linux是最受程序员欢迎的操作系统之一。第一它是开源的,第二它的系统调用少,第三它的抽象更到位。一切皆进程,一切...

  • Linux高级环境编程之7执行单元_进程管理

    课程目标 (1) 掌握进程的基本概念,进程属性获取。(2) 掌握进程的生命周期以及资源申请与释放的过程。(3) 掌...

  • 初识Linux

    文章目录 一、熟悉Linux环境 二、shell编程 三、Linux进程控制与通信管理 四、文件系统与磁盘管理 五...

  • 多线程编程

    多线程编程之Linux环境下的多线程(一)多线程编程之Linux环境下的多线程(二)多线程编程之Linux环境下的...

网友评论

      本文标题:linux高级环境编程--进程

      本文链接:https://www.haomeiwen.com/subject/rhchcxtx.html