主页 > 电脑硬件  > 

嵌入式学习(18)---Linux文件编程中的进程

嵌入式学习(18)---Linux文件编程中的进程
一、进程的概念

进程:(用来描述 程序动态执行的过程,方便操作系统管理的)     进行中的程序      程序的一次执行过程 (内存 + CPU)     程序的实例         程序  ----加载到内存----> 进程

应用场景:    实现并发        同一时刻 同时发生         并行        一并前行 

进程 的组成:        进程怎么来的?        程序 ---- 加载到内存 ----> 进程         程序的组成:         程序 = 代码 + 数据         程序 = 代码区 + [栈|堆|全局区|字符串常量区]

   进程 = 代码|data|bss|堆|栈 + pcb     //pcb (process control block) 进程控制块 

pcb的组成: struct task_struct {     PID,               //进程标识符     PPID,            //父进程ID号  parent      当前工作路径     //chdir     umask            //0002     进程打开的文件列表 //文件IO中有提到     信号相关设置       //处理异步io, ---段错误     用户id,组id     进程资源的上限 }  

进程的调度算法     1.公平 效率    2.时间片轮转     3.先来先服务   

进程的状态:

PROCESS STATE CODES        Here are the different values that the s, stat and state output specifiers         (header "STAT" or "S") will display to describe the state of a process:

               D    uninterruptible sleep (usually IO)      //不可中断的睡眠态                R    running or runnable (on run queue)  // 运行态                S    interruptible sleep (waiting for an event to complete)//可中断的睡眠态                T    stopped by job control signal            // 暂停态                t    stopped by debugger during the tracing                W    paging (not valid since the 2.6.xx kernel)                X    dead (should never be seen)                Z    defunct ("zombie") process, terminated but not reaped by its parent

       For BSD formats and when the stat keyword is used, additional characters may be displayed:

               <    high-priority (not nice to other users)                N    low-priority (nice to other users)                L    has pages locked into memory (for real-time and custom IO)                s    is a session leader                l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)                +    is in the foreground process group

     R  --- 运行态       D  --- 不可中断 睡眠态      S  --- 可中断 睡眠态       T  --- 暂停态       Z  --- 僵尸态   

二、进程管理的命令及运用 1、进程管理的命令

top  //类似Windows的下任务管理器 

ps -eLf | head -1   //可以观察到 PID PPID等     eg:

     F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD

ps -eLf | grep a.out  //查看a.out 信息 //可以观察到 PID PPID ps -aux | grep a.out  //可以查看进程 的状态 

pstree  //进程树  

pstree -sp pid号 //查看指定的进程的关系

kill //给进程发信号       kill + 信号 + 程序的pid号         eg:        kill -9 5266 kill -l  //查看可以发送的信号 

2、进程的运用

linux下编程 使用进程: 1.创建 2.进行运行  3.进程结束 

1.创建  fork()  

       pid_t fork(void);        功能:           创建子进程 (通过复制调用进程)        参数:           void         返回值:           成功                在父进程中 返回子进程的pid号               在子进程中 返回0           失败               -1 && errno 被设置                    pid号:           pid 本质上就是一个数值            正整数 1 

         叉子     一次调用,会返回两次。     子进程先运行和是父进程先进程,顺序不确定。     变量不共享。          子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。          此时,父子进程各自拥有独立的4g内存空间 (32位的系统)          功能:           通过该函数可以从当前进程中克隆一个同名新进程。           克隆的进程称为子进程,原有的进程称为父进程。           子进程是父进程的完全拷贝。           复制之后,           子进程和父进程各自拥有自己的用户空间(进程空间)           子进程和父进程的执行过程是从fork函数之后执行。                      子进程与父进程具有相同的代码逻辑。                返回值:int 类型的数字。             在父进程中:成功 返回值是子进程的pid号 >0                         失败 返回-1;             在子进程中:成功 返回值 0                         失败 无                   注意:       1.创建好之后,父子进程的运行顺序是不确定 ---全部取决于操作系统的调度        2.他们的数据相互独立,父进程或子进程对数据的修改,不会相互影响,只会对各自造成影响

操作:        将父进程杀死         //使用kill停止父进程       init进程(1)   //UNIX环境高级编程(init -- systemd)          init(1)───gnome-terminal-(2554)───bash(3336)───a.out(5934)───a.out(5935)

 杀死父进程:     init(1)───a.out(5935) 

    子进程还在 ,父进程不在 ---- 孤儿进程                               ---- 此时由init进程 收养                                      结束子进程,父进程还在,但是父进程并没有对子进程"收尸",会占用硬盘空间             特殊:       孤儿进程             子进程 还在,父进程不在       僵尸进程            子进程 结束,父进程还在,且父进程并未"收尸"           僵尸态进程有危害 

eg:创建n个子进程

标签:

嵌入式学习(18)---Linux文件编程中的进程由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“嵌入式学习(18)---Linux文件编程中的进程