gpt4 book ai didi

c - 应用程序退出后信号量保持打开状态

转载 作者:可可西里 更新时间:2023-11-01 11:47:13 26 4
gpt4 key购买 nike

我有一个用 C 语言为 Linux 平台编写的第 3 方应用程序。该应用程序使用以下代码创建信号量:

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() 调用会关闭所有打开的命名信号量。然而,这些不是命名信号量。

在此先感谢您的帮助。

最佳答案

为了处理异常终止,我们可以安装信号处理程序

/* signal handlers available in signal.h */
#include <signal.h>

void SignalHandler(int iSignalNum)
{
switch(iSignalNum)
{
case SIGINT:
case SIGSEGV:
case SIGTSTP:
{
/* Add Stuffs if necessary */
semctl(SemId, 0, IPC_RMID);
}
break;
default:
break;
}
exit(0);
}


int main()
{
....

/* Register the signal handlers */
signal(SIGINT, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGTSTP, SignalHandler);
.....
}

关于c - 应用程序退出后信号量保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11298242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com