Hello!
I have a problem with a semaphore and I am not sure whats the problem.
Its about the lifecycle of a semaphore after logout.
The workflow:
A program creates a semaphore and exits.
It is executed by a non-root user.
After execution the user quits the session (logout).
If I do the workflow on Debian 8 the semaphore is still here if I relogin.
Thats what I would expect. The semaphore should exists as long it is not
deleted or the OS restarts.
If I do it on Debian 9 the semaphore is deleted after I relogin and
check (ipcs).
If I do it on Debian 9 with root or sudo the behaviour the same as it is
on Debian 8.
Heres a little programm in C++ for testing.
----sem.cpp------------------------------------
int main (void)
{
printf ("\n*** SEM ***");
long semkey = 0x99112233;
printf ("\nkey=%x", semkey);
long sem = semget (semkey, 1, IPC_CREAT | IPC_EXCL | 0666);
if (sem == -1)
{
printf ("\nunable to create SEM (perhaps an old exists, try to
delete)");
sem = semget (semkey, 1, 0666);
if (sem == -1)
{
printf ("\nunable to get old SEM");
}
else
{
if (semctl (sem, 0, IPC_RMID) == 0)
{
printf ("\nold SEM deleted");
}
else
{
printf ("\nunable to delete old SEM\n");
return 1;
}
}
printf ("\nretry to create SEM");
sem = semget (semkey, 1, IPC_CREAT | IPC_EXCL | 0666);
if (sem == -1)
{
printf ("\nunable to create SEM\n");
return 1;
}
}
if (semctl (sem, 0, SETVAL, 1) == -1) // exactly 1 in
critical-section
{
printf ("\nunable to init SEM\n");
return 1;
}
printf ("\nOK\n");
return 0;
}
---------------------------
Compile with g++ sem.cpp.
If the program also creates a shared memory that will stay after logout
if executed by non-root.
Also if I start the program with nohup and & it will stay executed.
But the semaphore disappears.
???
Cheers,
CH