linux进程知识总结

进程:系统进行资源调度和分配的的基本单位,实现了操作系统的并发。

1.进程的资源组成:

(1).内核空间进程资源PCB:记录着包括进程控制块本身以及打开的文件表项,当前的目录、当前终端信息、线程基本信息、可以访问的内存地址空间、PID/PPID等各种信息。  内核通过PCB可以访问到进程的所有资源,用户访问时需要使用系统调用函数;

(2).用户空间进程资源:进程的代码段、数据段、堆栈以及可以共享访问的内存空间,进程可以直接访问,在进程退出时自动释放;

(3).Fork创建新的进程,extern _pid_t fork(void );  当pid=0时子进程,pid>0时为父进程,子进程复制父进程用户空间的所有数据(代码段,数据段,bss段,堆栈),以及内核空间绝大多数的信息,从而成为一个独立的实体。  而对于内核空间中打开的文件描述符fd所对应的文件表项则以共享的方式一起使用(父进程打开一个文件向其中写入字符,子进程打开文件后会接着文件的偏移,继续写入);

(4).Vfork创建新的进程与父进程共享代码段和数据段。

2.进程的状态:

(1).就绪态:TASK_RUNNING,进程申请到了除CPU以外的其他所有资源;

(2).等待状态(可以被中断打断):TASK_INTERRUPTIBLE,处于等待的队列,等待资源有效时被唤醒,可以被中断唤醒;

(3).等待状态(可以被中断打断):TASK_UNINTERRUPTIBLE,处于等待的队列,不可以被中断唤醒;

(4).僵死状态:TASK_ZOMBLE,进程用户空间释放,PCB等待父进程的释放;

(5).停止状态:TASK_STOPPED,收到SIGSTOP等信号被外部程序暂停,再次被允许时继续执行(SIGCONT信号)。

 

3.僵尸进程:

(1)原因:进程调用了exit命令结束了自己的进程,子进程先于父进程退出,僵尸进程放弃了大部分的内存空间,代码段、数据段等全部销毁,不能再被调度,但因为其PCB中还保留了很多关于它的退出信息供其他的进程采集,所以它的PCB也不会被摧毁,这样就造成了内存的浪费问题;

(2).处理方法:①waitpid(-1,NULL,WNOHANG) 函数用来等待子进程结束;   ②让父进程等待子进程,在子进程工作完之后父进程再工作。子进程在销毁退出时会给父进程发送一个SIGCHLD信号,父进程收到信号之后可以使用wait()函数对其进行处理;  ③两次使用fork函数,使紧跟的子进程直接退出,使得孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。

(3).Ps查看时进程的状态信息为:<defunt > 或 <z>;

 

4.孤儿进程:

(1)原因:父进程先于子进程退出,导致子进程被init进程收养的进程,而init进程在退出时会回收其内核空间资源。

(2)在使用ps -aux | grep pid时其父进程pid为1.

 

5.守护进程:

(1)一种在后台运行的特殊进程,脱离于终端,无法被终端中产生的任何信号打断,执行过程产生的信息不在终端显示,周期性的执行任何和处理事件。(服务器常用);

(2)守护进程在关闭终端控制台时不会受影响;

(3)守护进程的会话组和当前目录,文件描述符都是独立的;

(4)使用ps -axj查看守护进程。

守护进程的启动:①系统启动时由启动脚本/etc/init.d脚本运行; ②利用inetd超级服务器启动,如telnet;③由corn命令定时启动的进程以及在终端使用nohup命令驱动的进程。

 

6.后台进程:

将那些不需要交互,没有输出的进程的进程放在后台运行;

相关命令:①将命令放在后台运行 xxx命令 + & ;②查看后台进程:jobs  ③将程序放到后台运行:ctrl + z; ④将挂起的进程放在后台运行:bg + 进程名。

 

7.进程间通信方式:

管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket

(1)管道

 ①无名管道PI PE:它是半双工的(即数据只能在一个方向上流动),临时存在(在完成通信之后自动消失);  具有固定的读端和写端;  只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间);  可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数,但它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

②有名管道FIFO:FIFO可以在无关的进程之间交换数据;  FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

(2)系统IPC:

①消息队列:消息队列是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标记。 (消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点)具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;  特点:消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级;消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除;消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

②信号量semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。特点:信号量用于进程间同步,若要在进程间传递数据需要结合共享内存;  信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作;  每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数;  支持信号量组。

③信号signal:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

④共享内存(Shared Memory):它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。   特点:共享内存是最快的一种IPC,因为进程是直接对内存进行存取;  因为多个进程可以同时操作,所以需要进行同步;  信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。

(3)套接字SOCKET:

socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值