我有一个用C语言编写的用于Linux平台的第三方应用程序。应用程序创建使用以下代码信号量:信号量在应用程序退出后保持打开状态
union semun {
int Value;
struct semid_ds *Buffer;
unsigned short * Array;
} Arg;
Arg.Value = 0;
SemId = semget(IPC_PRIVATE , ONE_SEMAPHORE, 0666 | IPC_CREAT);
semctl(SemId, 0, SETVAL, Arg);
当应用程序退出时,这些信号量是通过使用下面的代码的应用程序中删除:
semctl(SemId, 0, IPC_RMID);
如果应用程序异常停止(例如,通过发送多个SIGINT信号),这些信号量保持打开状态。这些信号量可以看出打开通过使用下面的命令:
ipcs -s
这些信号量具有手动通过使用用ipcrm命令被从系统中除去。
如何确保在应用程序最终退出时应用程序创建的信号量会被删除?我读过exit()调用会关闭所有打开的已命名信号量。但是,这些并不被称为信号量。
我事先感谢您的帮助。
这就是为什么我们有些人从来不喜欢System V信号和相关项目。 – bmargulies