Я про замок не зря написал. Его использование позволяет не заботиться об удалении файла в критических ситуациях.
man flock
man 2 flock
Программа должна проверять наличие и файла, и замка на нем. Если есть и то, и то, значит, копия процесса в памяти точно есть.
Если файл есть, а замка нет, значит, в предыдущий раз программа завершилась аварийно, и можно этот файл удалять или перезаписывать.
решил сделать очень просто так:
*/10 * * * * if ! pgrep myprogram; then /home/user/myprogram; fi
каждые 10 минут запускается, если еще не запущена, программа myprogram
Вполне имеет право на существование. Надо только помнить, что еще одну копию запросто можно запустить из командной строки.
Я вот так делаю:
#include <fcntl.h>
int lock_fd;
struct flock lock_st;
сhar chpid[7];
lock_fd = creat(lock_file,0600);
memset(&lock_st,0,sizeof(lock_st));
lock_st.l_type=F_WRLCK;
lock_st.l_whence=SEEK_SET;
int res=fcntl(lock_fd,F_SETLK,&lock_st);
if(res < 0) {
fprintf ( stderr,"Unable to place a lock to file %s, code=%d (%s)\n",lock_file, errno, strerror(errno) );
exit(EXIT_FAILURE);
}
snprintf(chpid,6,"%d",getpid());
write(lock_fd,chpid,7);