File: childprocess.cc

package info (click to toggle)
bobcat 6.11.00-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,292 kB
  • sloc: cpp: 21,370; fortran: 6,507; makefile: 2,787; sh: 724; perl: 401; ansic: 26
file content (32 lines) | stat: -rw-r--r-- 837 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "process.ih"

void Process::childProcess()
{
    ExecContext ec;
    if (d_processType != USE_SHELL)
        ec = analyzeCommand();     // No system, so run execl() or execle()
    else
    {
        ec.argv = new char const *[4];
        ec.argv[0] = "/bin/sh";
        ec.argv[1] = "-c";
        ec.argv[2] = d_command.c_str();
        ec.argv[3] = 0;
    }

#ifdef BOBCAT_DIY_CLOEXEC_
    if (d_closedByChild != 0)
        close(d_closedByChild);
#endif

    (*(d_processType == USE_PATH ? execvp : execv))
        (ec.argv[0], const_cast<char * const *>(ec.argv));

    throw Exception{} << "Process: cannot execv[p] " << d_command;

}

//    std::cerr << "ChildOutput starts as:\n";
//    for (char const **cp = ec.argv; *cp; ++cp)
//        std::cerr << "  " << *cp << endl;
//    std::cerr << "======================\n";