Search code examples
javataillong-running-processes

long running application (tail like)


I want to write an tail like app. Now this app, scans a file for changes in the background and fires events in case something changed.

I want to run my application until the user requests to exit it by pressing ctrl + c (working by default). I do not want to create a lot of CPU load just by doing an endless while(true) loop like I'm doing ATM:

try {
        // thread doing the monitoring
        thread.start();

        // forcing the programm not to exit
        while (System.in.available() == 0) {
            Thread.sleep(5000);
        }

    } catch (final IOException e) {
        e.printStackTrace();
    }

Does anyone know a more elegant/the right approach for this?


Solution

  • I'm not sure why you are using a thread in the first place, the 'tail' unix script is simply a while(true) loop with no exit condition. It watches the file and prints changes if any is detected. I think by default it pauses 1 second, so basically:

    while(true) {
       // Code goes here. Watch file, System.out.print if it changes
    
       Thread.sleep(1000);
    }
    

    No need for a thread. But to answer the question about the best way to keep your app alive: Simply don't return from the thread's run() method. You don't have to join the thread, the application will stay in the foreground as long as it has one non-daemon running thread.