The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
.
google unix.com



High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Problems with logadm / syslog in Sol 9/10 avronius SUN Solaris 10 11-04-2008 02:24 PM
[Linux] How Do I Run Until Segfault aslambilal UNIX for Dummies Questions & Answers 1 10-17-2008 08:01 PM
Catching ctrl-C or ctrl-D sendhilmani123 Shell Programming and Scripting 2 05-02-2006 05:02 PM
Disable ctrl-c,ctrl-d,ctrl-d in ksh script wtofu AIX 6 06-29-2005 04:41 PM
problems with ctrl-z, to switch foreground, background yls177 UNIX for Dummies Questions & Answers 9 04-15-2003 12:09 PM

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 06-12-2009
james2432 james2432 is offline
Registered User
  
 

Join Date: Apr 2009
Posts: 15
2 Problems: Segfault on ctrl+c and syslog() prob

1. Even if i have the handles for ctrl+c it gives off a segfault
2. syslog doesn't log LOG_ERR event with log masked specified or non specified, it logs LOG_WARNING however...

Code:
#include <sys/types.h>  /* include this before any other sys headers */
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <assert.h>
#include <syslog.h>
#include <errno.h>
#include <sys/wait.h>   /* header for waitpid() and various macros */
#include <signal.h>     /* header for signal functions */
#include <stdio.h>      /* header for fprintf() */
#include <unistd.h>     /* header for fork() */
#include <stdlib.h>   
void  ChildProcess(void);                /* child process prototype  */
void  ParentProcess(void);               /* parent process prototype */
#define DAEMON_NAME "mplayerdaemon"
#define PID_FILE "/var/run/mplayerdaemon.pid"

/***********************************************************
  Function: signal_handler
  Description: Handles signals the daemon might receive. 
               Gives the daemon enough time to properly shutdown

  Params: sig : The signal(int) received
 *********************************************************************/
void signal_handler(int sig) {
 
    switch(sig) {
        case SIGHUP:
            syslog(LOG_WARNING, "Received SIGHUP signal.");
            break;
        case SIGTERM:
            syslog(LOG_WARNING, "Received SIGTERM signal.");
            break;
        default:
            syslog(LOG_WARNING, "Unhandled signal (%d) %s", strsignal(sig));
            break;
    }
}

int  main(int argc, char *argv[])
{
#if defined(DEBUG)
    int daemonize=0;
#else
    int daemonize=1;
#endif
    
    // Setup signal handling before we start
    signal(SIGABRT, signal_handler);
    signal(SIGHUP, signal_handler);
    signal(SIGTERM, signal_handler);
    signal(SIGINT, signal_handler);
    signal(SIGQUIT, signal_handler);

    syslog(LOG_INFO, "[INFO] %s daemon starting up",DAEMON_NAME);

#if defined(DEBUG)
        setlogmask(LOG_UPTO(LOG_DEBUG));
        openlog(DAEMON_NAME,LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER);
#else
        setlogmask(LOG_UPTO(LOG_INFO));
        openlog(DAEMON_NAME, LOG_CONS, LOG_USER);
#endif

    /* Our process ID and Session ID */
    pid_t pid, sid;

    syslog(LOG_WARNING,"[ERROR] testing error");
    daemonize=0; //for debug purposes only
    if (daemonize) {
        syslog(LOG_INFO, "[INFO] starting the daemon process");


        /* Fork off the parent */
        pid = fork();
        if (pid<0) {
            exit(EXIT_FAILURE);
        }
        /* If we got a good PID, then 
          we can tell the parent to exit*/
        if (pid>0){
            exit(EXIT_SUCCESS);
        }
        /* Child will always have a 0 if successfully created*/

        /* Change umask so that the program will have access to all child files */
        umask(0);

        /* Create a new SID for the child process */
        sid = setsid();
        if (sid<0){
            syslog(LOG_WARNING,"[ERROR] Error while getting new session id, error code : -1");
            exit(EXIT_FAILURE);
        }

        /* Change the current working directory */
        /*
         if ((chdir("/")) < 0){
            syslog(LOG_ERR,"Error while changing directory error code : -1");
             exit(EXIT_FAILURE);
         }

         */

        /* Close out the standard file descriptors 
           Because daemon won't be accepting input from console */
        close(STDIN_FILENO);
        close(STDOUT_FILENO);
        close(STDERR_FILENO);
        
    }

    while(1){
          int rc=system("ps -C mplayer -opid=");
                        
          rc = WEXITSTATUS(rc); /* Check if mplayer is running */
          printf("I was here pid: %d\n",rc);

        /*if mplayer quits unexpectedly */
        if(rc > 0 ){
           
                 launchmplayer();
                 sleep(2);
              }

     }

    /* if loop breaks daemon exits*/
    syslog(LOG_INFO, "%s daemon exiting",DAEMON_NAME);

    exit(0);
}

void launchmplayer(void)
{
     system("mplayer ~/test.avi");
     return;
}
  #2 (permalink)  
Old 06-16-2009
lagigliaivan lagigliaivan is offline
Registered User
  
 

Join Date: May 2008
Posts: 45
Hi

What OS/architecture are you using? I tried using Linux and although the code doesn't compile at first, it works fine and I did not receive a sigsev.

I remember once I had the same problem but it was in an architecture different to i386.
  #3 (permalink)  
Old 06-16-2009
james2432 james2432 is offline
Registered User
  
 

Join Date: Apr 2009
Posts: 15
Default kernel of ubuntu 9.04
I386 Archetechure
Reply

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 03:04 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0