-rw-r--r-- | core/launcher/main.cpp | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index a19da14..1e741d5 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp @@ -335,2 +335,25 @@ int initApplication( int argc, char ** argv ) +static const char *pidfile_path = "/var/run/opie.pid"; + +void create_pidfile ( ) +{ + FILE *f; + + if (( f = ::fopen ( pidfile_path, "w" ))) { + ::fprintf ( f, "%d", getpid ( )); + ::fclose ( f ); + } +} + +void remove_pidfile ( ) +{ + ::unlink ( pidfile_path ); +} + +void handle_sigterm ( int sig ) +{ + if ( qApp ) + qApp-> quit ( ); +} + int main( int argc, char ** argv ) @@ -338,6 +361,14 @@ int main( int argc, char ** argv ) #ifndef SINGLE_APP - signal( SIGCHLD, SIG_IGN ); + ::signal( SIGCHLD, SIG_IGN ); + + ::signal ( SIGTERM, handle_sigterm ); + + ::setsid ( ); + ::setpgid ( 0, 0 ); + + ::atexit ( remove_pidfile ); + create_pidfile ( ); #endif - int retVal = initApplication( argc, argv ); + int retVal = initApplication ( argc, argv ); @@ -345,6 +376,5 @@ int main( int argc, char ** argv ) // Kill them. Kill them all. - setpgid( getpid(), getppid() ); - killpg( getpid(), SIGTERM ); - sleep( 1 ); - killpg( getpid(), SIGKILL ); + ::kill ( 0, SIGTERM ); + ::sleep( 1 ); + ::kill ( 0, SIGKILL ); #endif |