进程间通信机制java_进程间通信(IPC)机制

进程间通信(IPC)机制

读写磁盘文件中的信息是进程间通信的方法之一。可是,对许多程序来说,这种方法既慢又缺乏灵活性。因此,Linux提供了丰富的进程间通信(IPC)机制。

信号(signal),用来表示事件的发生。

管道(亦即shell用户所熟悉的“|”操作符)和FIFO,用于在进程间传递数据。

套接字(socket),供同一台主机或是联网的不同主机上所运行的进程之间传递数据。

文件锁定,为防止其他进程读取或更新文件内容,允许某进程对文件的部分区域加以锁定。

消息队列,用于在进程间交换消息(数据包)。

信号量(semaphore),用来同步进程动作。

共享内存,允许两个及两个以上进程共享一块内存。当某进程改变了共享内存的内容时,其他所有进程会立即了解到这一变化。

信号

尽管将信号视为IPC的方法之一,但其在其他方面的广泛应用则更为普遍。

人们往往将信号称为“软件中断”。进程收到信号,就意味着某一事件或异常情况的发生。信号的类型很多,每一种分别标识不同的事件或情况。采用不同的整数来标识各种信号类型,并以SIGxxxx形式的符号名加以定义。

内核、其他进程(只要具有相应的权限)或进程自身均可向进程发送信号。

发生下列情况之一时,内核可向进程发送信号:

用户键入中断字符(通常为Control-C)

进程的子进程之一已经终止。

由进程设定的定时器(告警时钟)已经到期。

进程尝试访问无效的内存地址。

在shell中,可使用kill命令向进程发送信号。在程序内部,系统调用kill()可提供相同功能。

收到信号时,进程会根据信号采取如下动作之一:

忽略信号。

被信号“杀死”

先挂起,之后再被专门信号唤醒。

就大多数信号类型而言,程序可选择不采取默认的信号动作,而是忽略信号(当信号的默认处理行为并非忽略此信号时,会派上用场)或建立自己的信号处理器。信号处理器是由程序员定义的函数,会在进程收到信号时自动调用,根据信号的产生条件执行相应动作。

信号从产生直至送达至进程期间,一直处于挂起状态。通常,系统会在接收进程下次调度时,将处于挂起状态的信号同时送达。如果接收进程正在运行,则会立即将信号送达。然而,程序可以将信号纳入所谓“信号屏蔽”以求阻塞该信号。如果产生的信号处于“信号屏蔽”之列,那么此信号将一直保持挂起状态,直至解除对该信号的组设。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值