加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:进程管理和通信

发布时间:2016-09-27 18:52:05 所属栏目:Unix 来源:站长网
导读:副标题#e# 进程和程序的区别: 进程: 程序的一次执行过程 动态过程,进程的状态属性会发生变化 程序:存放在磁盘上的指令、数据的有序集合 是个文件,可直观看到 程序program 静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu! 但前提是cpu

从终端输入的字符不可能达到守护进程,守护进程中用常规的方法(如printf)输出的字符也不可能在终端上显示出来。所以,文件描述符为0、1和2的三个文件(对应标准输入、标准输出和标准错误这三个流)已经失去了存在的意义,也应被关闭。

启动:

在Linux系统启动时从启动脚本/etc/rc.d中启动,由作业规划进程crond启动

用户终端(通常是 shell)执行。

进程间的通信

AT&T的贝尔实验室,对Unix早期的进程间通信进行了改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内

BSD(加州大学伯克利分校的伯克利软件发布中心),跳过了该限制,形成了基于套接字(socket)的进程间通信机制

传统的进程间通信方式

无名管道(pipe)

有名管道(fifo)

信号(signal)

System V IPC对象

共享内存(share memory)

消息队列(message queue)

信号灯(semaphore)

BSD

套接字(socket)

UNIX IPC(InterProcess Communication)

无名管道pipe

特点:

只能用在有血缘关系的进程之间的通信、半双工(单方向的数据)。

类似于文件IO的读写,只存在于内存中。

创建:

#include <unistd.h>

int pipe(

int fd[2]    //

fd:包含两个元素的整型数组(

fd[0]固定用于读管道,而fd[1]固定用于写管道。)

);

返回值

成功:0,

出错:-1.

pipe总结:

读端:

写端存在

管道中有数据,返回读取的字节数。

无数据,阻塞到有数据。

写端不存在

管道中有数据,返回读取的字节数。

无数据,返回0,所以,read返回0意味着写端关闭了。

写端:

读端存在

空间足,返回写入的字节数。

空间不足,有多少写多少,直到写完返回。

读端不存在

进程被SIGPIPE信号终止。

有名管道(FIFO)

特点:

类似队列、全双工(可读可写)

有名管道可以使互不相关的两个进程互相通信。有名管道可以通过路径名来指出,并且在文件系统中可见

进程通过文件IO来操作有名管道

有名管道遵循先进先出规则

不支持如lseek() 操作

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读