ftok возвращает разные ключи при одинаковых входных параметрах... почему?
код следующий:
#include <...>
static bool work = false;
void sig_handler( int sn ) {
if( sn == SIGTERM ) {
work = false;
}
}
int main() {
/* daemonize */
key_t shm_key = ftok( "/var/run/mydaemon.pid", 1 );
printf( "(i) key = %d\n", shm_key );
int shm_id = shmget( shm_key, 0x10000, 0666 );
if( shm_id == -1 ) shm_id = shmget( shm_key, 0x10000, IPC_CREAT|0666 );
void *ptr = shmat( shm_id, 0, 0 );
signal( SIGTERM, sig_handler );
work = true;
while( work ) pause();
/* shmctl( shm_id, IPC_RMID, 0 ); */
shmdt( ptr );
return 1;
}
вот лог из консоли:
$ g++ -static -o mydaemon mydaemon.cpp
$ ./mydaemon
(i) key = 33587520
$ pkill -SIGKILL mydaemon
$ ./mydaemon
(i) key = 33587520
$ pkill -SIGTERM mydaemon
$ ./mydaemon
(i) key = 33587510
первый раз закрываю именно с помощью SIGKILL, т.е. по идее разделяемый сегмент остается в памяти, второй раз SIGTERM, и только после второго закрытия, ключ меняется на другой... почему? по идее ведь должен генерироваться тот же...