Belle II Software  release-05-01-25
Executor.cc
1 #include "daq/slc/system/Executor.h"
2 #include "daq/slc/system/LogFile.h"
3 
4 #include <iostream>
5 #include <cstdarg>
6 #include <cstdio>
7 #include <unistd.h>
8 
9 using namespace Belle2;
10 
11 void Executor::setExecutable(const char* format, ...)
12 {
13  va_list ap;
14  static char ss[1024];
15  va_start(ap, format);
16  vsprintf(ss, format, ap);
17  va_end(ap);
18  m_path = ss;
19 }
20 
21 void Executor::setExecutable(const std::string& path)
22 {
23  m_path = path;
24 }
25 
26 void Executor::addArg(const char* format, ...)
27 {
28  va_list ap;
29  static char ss[1024];
30  va_start(ap, format);
31  vsprintf(ss, format, ap);
32  va_end(ap);
33  m_arg_v.push_back(ss);
34 }
35 
36 void Executor::addArg(const std::string& arg)
37 {
38  m_arg_v.push_back(arg);
39 }
40 
41 bool Executor::execute(bool isdaemon)
42 {
43  char* argv[256];
44  argv[0] = (char*)m_path.c_str();
45  std::cerr << "" << argv[0] << " ";
46  for (size_t i = 0; i < m_arg_v.size(); i++) {
47  argv[i + 1] = (char*)m_arg_v[i].c_str();
48  std::cerr << "" << argv[i + 1] << " ";
49  }
50  std::cerr << std::endl;
51  argv[m_arg_v.size() + 1] = NULL;
52  if (isdaemon) daemon(0, 0);
53  if (execvp(m_path.c_str(), argv) == -1) {
54  LogFile::error("Faield to start %s", argv[0]);
55  return false;
56  }
57 
58  return true;
59 }
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19