【发布时间】:2012-07-03 03:17:22
【问题描述】:
我有一个用 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 信号量和相关项目。