Suprimer shm sem msgqueue

Contenu du snippet

Vous travaillez avec les IPC sous Unix? Vous vous plantez et vos files de messages, vos shared memory ou vos semaphores ne sont pas supprimés? Voici une petite source sans prétention qui nettoie tout sa pour vous.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

// Semaphores
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

// Shm
#include <sys/shm.h>

// Msg Queue
#include <sys/msg.h>

int main (int argc,char *argv[])
{
	int sem, shm, msq, ret;

	if (argc != 4)
	{
		printf("Entrez l'ID de la file de Message: ");
		scanf("%d",&msq);
		printf("Entrez l'ID de la SHM: ");
		scanf("%d",&shm);
		printf("Entrez l'ID du Semaphore: ");
		scanf("%d",&sem);
	}
	else
	{
		msq=atoi(argv[1]);
		shm=atoi(argv[2]);
		sem=atoi(argv[3]);
	}

	printf("\n");

	if(msq!=0)
	{
		printf("Suppression de la MSG Queue");
		ret=msgctl(msq, IPC_RMID, 0);
		if(ret==-1)
			printf("\t\t\t[!!]\n");
		else
			printf("\t\t\t[Ok]\n");
	}
	if(shm!=0)
	{
		printf("Suppression de la SHM");
		ret=shmctl(shm, IPC_RMID, 0);
		if(ret==-1)
			printf("\t\t\t[!!]\n");
		else
			printf("\t\t\t[Ok]\n");
	}
	if(sem!=0)
	{
		printf("Suppression du Semaphore");
		ret=semctl(sem, 0, IPC_RMID, 0);
		if(ret==-1)
			printf("\t\t[!!]\n");
		else
			printf("\t\t[Ok]\n");
	}

	exit(0);
}

Conclusion :


Utilisation:
cc -o IpcKill main.c
IpcKill 123 456 789
avec:
123=id Msg Queue
456=id Shm
789=id Semaphore

Un 0 ignorera l'élement.
Ex:
IpcKill 0 0 123
Ne supprimera que le semaphore 123

Pour obtenir les id, utilisez la commande "ipcs | grep $USER"

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (Shibo_Sources)