Process.cpp
Go to the documentation of this file.
00001 // -*- C++ -*-
00020 #ifndef COIL_PROCESS_H
00021 #define COIL_PROCESS_H
00022 
00023 #include <stdlib.h>
00024 #include <unistd.h>
00025 #include <libgen.h>
00026 #include <signal.h>
00027 #include <sys/types.h>
00028 #include <sys/stat.h>
00029 #include <coil/stringutil.h>
00030 
00031 namespace coil
00032 {
00033 
00041   int launch_shell(std::string command)
00042   {
00043     signal(SIGCHLD, SIG_IGN);
00044 
00045     pid_t pid;
00046     if((pid = fork()) < 0 )
00047       { // fork failed
00048         return -1; 
00049       }
00050     
00051     if (pid == 0) // I'm child process
00052       {
00053         //        signal(SIGCHLD, SIG_IGN);
00054         //        signal(SIGALRM, SIG_IGN);
00055         //        signal(SIGHUP , SIG_IGN);
00056         //        signal(SIGPIPE, SIG_IGN);
00057         //        signal(SIGTERM, SIG_IGN);
00058         setsid();
00059         //        close(0);
00060         //        close(1);
00061         //        close(2);
00062         //        open("/dev/null", O_RDWR);
00063         //        dup2(0, 1);
00064         //        dup2(0, 2);
00065         //        umask(0);
00066 
00067         coil::vstring vstr(::coil::split(command, " "));
00068         char* const * argv = ::coil::toArgv(vstr);
00069 
00070         execvp(vstr.front().c_str(), argv);
00071         
00072         return -1;
00073       }
00074     return 0;
00075   }
00076 
00077   int daemon(int nochdir, int noclose)
00078   {
00079     return daemon(nochdir, noclose);
00080   }
00081 
00082 
00083 }; // namespace coil
00084 #endif // COIL_PROCESS_H


openrtm_aist
Author(s): Noriaki Ando
autogenerated on Thu Aug 27 2015 14:16:38