linux系统编程:多任务编程(进程1)

1.进程

  进程:(进行中的程序)--正在运行的程序 (动态的) ---内存 
  程序的一次执行过程!

  一个程序一个程序 可以 对应多个进程
   程序 -- a.out (可执行程序) ---静态的
   程序 加载 到内存 运行起来 成为了 进程。 

   进程是 程序运行的实体。

   程序 = 数据+代码

    

2.进程的组成

  进程 = pcb + text|data|bss|堆|栈

   宏观并行,微观串行。

  pcb

   

3.进程状态

   三态模型

    

linux下的模型

4.linux下进程的命令

  ps  -elf  |  grep  程序名    //主要查看父子进程       包含  pid      ppid //parent pid

  eg:  ps   -elf  | grep a.out   //査看 a.out 进程

  ps aux grep | 程序名    //主要查看某个而进程的pid号及状态信息

 eg:  ps aux  grep | a.out    //查看 a.out

 pstree   -sp   pid号/   /用途,查看 父子进程间的关系(以树形图的方式展现包含了pid号)
   kill    //杀死---给进程发信号
   eg:kill  -l    //查看 kill可以发送的信号

   kill   - 9   pid号    //给指定的pid号发9号信号

  ki11 -19 pid号   //暂停进程      kill -18 pid号;  //恢复进程
  killall     //可以指定进程名称这种方式发送信号

 eg:kill -9 a.out //表示给所有叫a.out的进程发信号

5.linux系统

   R --- 运行或可运行     -就绪态

   S --- 可中断的睡眠态

   D --- 不可中断的睡眠态

   T --- 暂停态

    Z --- 僵尸态

6.创建一个进程

   fork();

   

  功能:

   创建一个进程(child process 子进程)

    通过复制调用进程复制的子进程

返回值     : 成功   在父进程中返回了子进程的pid号     在子进程返回了0

                    失败    在父进程中返回了-1并且没有子进程被创建

fork之后,父进程和子进程都是从fork之后的下一句话开始执行。

7.进程的执行

    

8.进程的结束

    正常结束:•使用 exit() 函数:这是最常见的进程正常结束方式。exit() 函数由 C 标准库提供,它会立即终止进程并返回一个状态码给父进程。  

     异常结束:•信号处理:进程可以因为接收到特定的信号而结束,例如 SIGTERM(终止信号)或 SIGKILL(强制终止信号)。这些信号通常由操作系统发送,也可以由其他进程发送。运行时错误:当程序遇到不可恢复的错误时,如段错误(SIGSEGV)或浮点异常(SIGFPE),进程会被异常终止。

    当进程结束时,操作系统会保留一个称为“退出状态”的值。这个值可以被父进程捕获,用于判断子进程是否正常结束。在 UNIX 和类 UNIX 系统中,父进程可以使用 wait() 或 waitpid() 系统调用来获取子进程的退出状态。

 9.进程结束时资源的回收  - 僵尸态

       在操作系统中,僵尸进程(Zombie Process)是指一个已经结束但其父进程尚未对其进行适当清理的进程。僵尸进程本身并不占用任何资源,但它仍然存在于进程表中,占用一个进程表条目,直到其父进程通过 wait() 或 waitpid() 系统调用来回收它为止。

      父进程先于子进程结束:如果父进程在子进程结束之前就已经结束,那么子进程就会变成孤儿进程,并被 init 进程(PID 1)收养。此时,子进程是一个后台进程,init 进程会负责回收孤儿进程,但在这之前,子进程会处于僵尸状态。

      父进程没有调用 wait() 或 waitpid():如果父进程创建了子进程,但在子进程结束之前没有调用 wait() 或 waitpid() 来回收子进程的状态信息,那么子进程就会变成僵尸进程。

  

10. 1.32位的平台,每个进程拥有独立的4G内存空间(虚拟的)

       2.每个进程运行在各自独立的4G内存空间中。

       

    3.父子进程间,数据相互独立,不受影响。

    4.父子进程运行的顺序,不确定。取决于操作系统---先调度谁 。

    判断 fork() && fork() ||  fork ()  这个式子中有几个进程

    

                       

  有5个进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值