我有這個應用程序,它是一個用於檢測和監視設備的守護程序。它接受參數,然後打印哪些設備可用。例如多次執行程序而不復制實例
./udevmon -s //prints the devices that are connected to my server.
樣本輸出
Device: /dev/ttyUSB0 subsystem: tty
現在,當我再次運行它來檢查哪些設備可用,打字./udevmon -s
再次它將創建一個具有不同的進程id ./udevmon的第二instace。當我輸入沒有參數的./udevmon時,它會用不同的進程ID再次創建一個新的實例,現在總共有3個./udevmon進程。這會讓我的系統變慢,因爲我需要多次運行./udevmon。
如何運行我的應用程序,以便它只創建一個實例。例如,當我再次鍵入./udevmon -s或./udevmon時重新啓動它?
以下是示例代碼。
int main (int argc, char *argv[])
{
mon_init(); // initialize device monitor
scan_init(); // initialize device scan
//Fork the Parent Process
pid = fork();
if (pid < 0) { exit(EXIT_FAILURE); }
//We got a good pid, Close the Parent Process
if (pid > 0) { exit(EXIT_SUCCESS); }
//Change File Mask
umask(0);
//Create a new Signature Id for our child
sid = setsid();
if (sid < 0) { exit(EXIT_FAILURE); }
//Change Directory
//If we cant find the directory we exit with failure.
if ((chdir("/")) < 0) { exit(EXIT_FAILURE); }
while((c=getopt(argc, argv,"s")) != -1) {
switch(c) {
case 's': scan_run(); break;
default: printf("wrong command\n");
}
}
//Main Process
while(1) {
start_mon();
}
udev_unref(udev);
return 0;
}
保持運行狀態:
你可以輕輕地使用下面的腳本做同樣與上面一些通知殺呢? –
如何創建一個'udevmon.pid'文件,它表示一個進程已經在運行?當進程存在時,當然,你必須刪除文件。這樣你可以防止產生新的進程。 –
是讓它運行,因爲如果設備被移除並添加,它也會報警。它在終端中打印。它運行在後臺..如果我再次運行該程序,它不應該創建該程序的第二個實例.. – demic0de