デバイスを検出して監視するデーモンプログラムであるこのアプリケーションがあります。引数を受け入れ、使用可能なデバイスを出力します。例えば
./udevmon -s //prints the devices that are connected to my server.
サンプル出力
Device: /dev/ttyUSB0 subsystem: tty
もう一度実行して使用可能なデバイスを確認すると、./udevmon -s
もう一度入力すると、異なるプロセスIDを持つ./udevmonの2番目のインスタンスが作成されます。引数なしで./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;
}