libcamera v0.0.0+3240-f2a18172-dirty (2022-05-13T12:20:20+00:00)
Supporting cameras in Linux since 2019
process.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * Copyright (C) 2019, Google Inc.
4 *
5 * process.h - Process object
6 */
7#ifndef __LIBCAMERA_INTERNAL_PROCESS_H__
8#define __LIBCAMERA_INTERNAL_PROCESS_H__
9
10#include <signal.h>
11#include <string>
12#include <vector>
13
15
16namespace libcamera {
17
18class EventNotifier;
19
20class Process final
21{
22public:
27 };
28
29 Process();
30 ~Process();
31
32 int start(const std::string &path,
33 const std::vector<std::string> &args = std::vector<std::string>(),
34 const std::vector<int> &fds = std::vector<int>());
35
36 ExitStatus exitStatus() const { return exitStatus_; }
37 int exitCode() const { return exitCode_; }
38
39 void kill();
40
42
43private:
44 void closeAllFdsExcept(const std::vector<int> &fds);
45 int isolate();
46 void died(int wstatus);
47
48 pid_t pid_;
49 bool running_;
50 enum ExitStatus exitStatus_;
51 int exitCode_;
52
53 friend class ProcessManager;
54};
55
57{
58public:
61
62 void registerProcess(Process *proc);
63
64 static ProcessManager *instance();
65
66 int writePipe() const;
67
68 const struct sigaction &oldsa() const;
69
70private:
71 static ProcessManager *self_;
72
73 void sighandler();
74
75 std::list<Process *> processes_;
76
77 struct sigaction oldsa_;
78 EventNotifier *sigEvent_;
79 int pipe_[2];
80};
81
82} /* namespace libcamera */
83
84#endif /* __LIBCAMERA_INTERNAL_PROCESS_H__ */
Notify of activity on a file descriptor.
Definition: event_notifier.h:20
Manager of processes.
Definition: process.h:57
static ProcessManager * instance()
Retrieve the Process manager instance.
Definition: process.cpp:159
int writePipe() const
Retrieve the Process manager's write pipe.
Definition: process.cpp:171
void registerProcess(Process *proc)
Register process with process manager.
Definition: process.cpp:102
ProcessManager()
Construct a ProcessManager instance.
Definition: process.cpp:115
const struct sigaction & oldsa() const
Retrive the old signal action data.
Definition: process.cpp:183
Process object.
Definition: process.h:21
void kill()
Kill the process.
Definition: process.cpp:365
int exitCode() const
Retrieve the exit code of the process.
Definition: process.h:37
int start(const std::string &path, const std::vector< std::string > &args=std::vector< std::string >(), const std::vector< int > &fds=std::vector< int >())
Fork and exec a process, and close fds.
Definition: process.cpp:235
ExitStatus
Exit status of process.
Definition: process.h:23
@ NormalExit
Definition: process.h:25
@ NotExited
Definition: process.h:24
@ SignalExit
Definition: process.h:26
Signal< enum ExitStatus, int > finished
Definition: process.h:41
ExitStatus exitStatus() const
Retrieve the exit status of the process.
Definition: process.h:36
Top-level libcamera namespace.
Definition: backtrace.h:17
Signal & slot implementation.