Android 不支持 SYSV IPC (SYSV IPC)

Android因可能导致内核资源泄漏而不支持SYSV IPC。当进程被杀死后,Sysv信号量无法自动释放,长时间运行可能导致系统异常。举例程序展示了资源泄漏的问题,运行后可能导致系统崩溃或出现USB子系统错误。
摘要由CSDN通过智能技术生成

Android 不支持 System V IPC, 即下面头文件提供的功能:

  <sys/sem.h>   /* SysV semaphores*/
  <sys/shm.h>   /* SysV shared memory segments */
  <sys/msg.h>   /* SysV message queues */
  <sys/ipc.h>   /* General IPC definitions */

Android不支持SYSV IPC的原因: 会导致全局的内核资源泄漏。例如,当一个有bug的或恶意程序退出后或普通程序被强行杀死后,没有办法自动释放Sysv信号量(在内核中分配的)。然而Android系统经常自动杀死进程,给新的进程腾出空间(Android的重要机制)。这意味着,即使程序没有bug也不是恶意代码,随时间的推移,进程经常被杀死然后重新创建,内核中用于实现SysV IPC的全局表格会被填满。这个时候,就会发生奇怪的事件并导致使用SysV IPC的程序无法运行,只有重启系统。而且考虑到可能有人会故意写恶意程序,所以Android选择不支持SysV IPC。下面提供一个导致内核资源泄漏的程序(需在Linux系统上运行)作为例证:

#include <sys/sem.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>


#define  NUM_SEMAPHORES  32
#define  MAX_FAILS       10


`sysv_ipc` 和 `posix_ipc` 都是 Python 的模块,用于与共享内存、信号量和消息队列等 POSIX IPC(Inter-Process Communication,进程间通信)机制进行交互。它们之间的区别主要包括以下几个方面: 1. 平台兼容性:`sysv_ipc` 模块仅适用于支持 System V IPC 的系统,如 Linux、Unix 和 macOS。而 `posix_ipc` 模块在支持 POSIX IPC 标准的操作系统上都可以运行,包括 Linux、Unix 和 macOS。 2. 接口和用法:两个模块提供了不同的接口和方法来操作 IPC 机制。`sysv_ipc` 模块使用 System V IPC 的 API,例如 `msgget()`、`msgsnd()`、`msgrcv()` 等来创建、发送和接收消息。而 `posix_ipc` 模块使用 POSIX IPC 的 API,如 `mq_open()`、`mq_send()`、`mq_receive()` 等来操作消息队列。 3. 功能支持:由于 System V IPC 和 POSIX IPC 的设计和实现有所不同,因此两个模块在支持的功能和特性上可能略有差异。例如,在消息队列方面,`posix_ipc` 模块支持消息优先级和非阻塞操作,而 `sysv_ipc` 模块则可能具有其他特定的功能。 需要根据具体的需求和系统环境来选择使用哪个模块。如果目标系统支持 System V IPC,并且需要使用 System V IPC 提供的特定功能,则可以选择使用 `sysv_ipc` 模块。如果目标系统支持 POSIX IPC,并且更关注跨平台兼容性,则可以选择使用 `posix_ipc` 模块。 希望这个解答对你有帮助!如果还有其他问题,请随时提问。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值