[linux-audio-dev] Daemon mode

Patrick Shirkey pshirkey at boosthardware.com
Sat Dec 16 13:48:04 UTC 2006

Lars Luthman wrote:
> On Sat, 2006-12-16 at 12:14 +0100, Lars Luthman wrote:
>> On Sat, 2006-12-16 at 17:56 +0700, Patrick Shirkey wrote:
>>> Hi,
>>> I am adding a Daemon mode to jackEQ and have most of the code in place now.
>>> I am stuck at the point where the daemon starts up and keeps going.
>>> Essentially I need the daemon mode equivalent of gtk_main() that keeps 
>>> ticking over until the app is told to stop or otherwise shutdown.
>>> I have not threaded the app at this point so hopefully there is a very 
>>> simple solution.
>> So the only thread that needs to do anything is the JACK thread? In that
>> case you can just add something like 
>>  ... init code ...
>>  bool run = true;
>>  while (run) sleep(10000);
>>  ... cleanup code ...
>> in the main thread, after setting up JACK. If you want to be nice you
>> can add signal handlers for SIGHUP and SIGINT that set 'run' to false.
> Ehm, and in that case you better change the sleep time to 1 or use
> usleep() and specify microseconds instead. You wouldn't want to wait for
> hours after trying to stop the program.
> Or is sleep() interrupted by signals even if there are signal handlers
> for them?

Thanks for the pointer Lars.

However I'm using c so this code doesn't work. I have modified it like so:

		    int run = TRUE;

		    while (run)
but that just gives a segv. It runs for about a second then gives up.

I'm also looking at the code for jackd and have spotted this function:

		sigwait (&signals, &sig);

so I added some new bits and pieces like so:

static sigset_t signals;

int main(int argc, char *argv[])

     int run;
     int sig;
     sigset_t allsignals;
	sigemptyset (&signals);
	sigaddset(&signals, SIGHUP);
	sigaddset(&signals, SIGINT);
	sigaddset(&signals, SIGQUIT);
	sigaddset(&signals, SIGPIPE);
	sigaddset(&signals, SIGTERM);
	sigfillset (&allsignals);


	run = TRUE;

	while (run)
		sigwait (&signals, &sig);

	return 0;


but that also returns segv at sigwait(). If I put a printf after sigwait 
it doesn't print. Before is ok.

I'm not sure how to proceed from here.


Patrick Shirkey - Boost Hardware Ltd.
Http://lau.linuxaudio.org - The Linux Audio Users guide

"Anything your mind can see you can manifest physically, then it will 
become reality" - Macka B

More information about the Linux-audio-dev mailing list