再開發應用程序或者服務器的時候,經常會用到,只啟動一個程序,以後再啟動的時候,檢查是否已經啟動,若啟動則退出。
並且,同時也有命令實現,向已有的程序發信號量,來實現reload,stop。等功能。
其實很簡單,只需要記住pid,然後對pid發送自定義的信號函數就可以,這樣就可以實現reload,stop等。
具體的例子如下:
if (argc > 1)
{
for (int i = 1; i < argc; i++)
{
if (!strcasecmp(argv[i], "stop"))
{
printf("signal stop\n");
int iPid = ReadPidFile();
if (iPid > 0)
{
kill(iPid, SIGUSR2);
}
exit(0);
}
else if (!strcasecmp(argv[i], "reload"))
{
printf("signal reload\n");
int iPid = ReadPidFile();
if (iPid > 0)
{
kill(iPid, SIGUSR1);
}
exit(0);
}
}
}實現重復啟動,可以通過open文件的互斥鎖來實現,用flock函數的LOCK_EX | LOCK_NB實現。