+ pid процесса если lock-файл существует а пида в списке процесов нет значит прога упала, или еще точнее если pid есть проверить этим ли процесом открыт lock-файл
>> про сокет подробней можно ?
смотри:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <string.h>
#include <sys/poll.h>
#include <unistd.h>
#define SOCKET_NAME "THERE_ARE_SUPER_PUPER_SOCKET_HERE"
#ifndef UNIX_PATH_MAX
#define UNIX_PATH_MAX (108)
#endif
#define MIN(A,B) A<B?A:B
int main (int argc, char ** argv) {
struct sockaddr_un SockAddr;
int AddrLen;
int Socket = socket (PF_UNIX, SOCK_STREAM, 0);
if (Socket == -1) {
printf ("unable to open communication socket because of %s, quitting\n", strerror (errno));
exit (-1);
} else {
SockAddr.sun_family = AF_UNIX;
memset (&SockAddr.sun_path, 0, UNIX_PATH_MAX);
memcpy (&SockAddr.sun_path [1], SOCKET_NAME, MIN (strlen (SOCKET_NAME), UNIX_PATH_MAX));
AddrLen = sizeof (SockAddr);
if (bind (Socket, (struct sockaddr *) &SockAddr, AddrLen)) {
printf ("unable to bind socket because of %s, quitting\n", strerror (errno));
exit (-1);
}
}
// any other stuff here
}
при повторном запуске выдаст
unable to bind socket because of Address already in use, quitting
к тому же через этот сокет с прогой могут общаться другие проги :)
смотри man unix