libcamera v0.1.0+127-8e215127-dirty (2023-12-02T01:06:12+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
8#pragma once
9
10#include <signal.h>
11#include <string>
12#include <vector>
13
16
17namespace libcamera {
18
19class EventNotifier;
20
21class Process final
22{
23public:
28 };
29
30 Process();
31 ~Process();
32
33 int start(const std::string &path,
34 const std::vector<std::string> &args = std::vector<std::string>(),
35 const std::vector<int> &fds = std::vector<int>());
36
37 ExitStatus exitStatus() const { return exitStatus_; }
38 int exitCode() const { return exitCode_; }
39
40 void kill();
41
43
44private:
45 void closeAllFdsExcept(const std::vector<int> &fds);
46 int isolate();
47 void died(int wstatus);
48
49 pid_t pid_;
50 bool running_;
51 enum ExitStatus exitStatus_;
52 int exitCode_;
53
54 friend class ProcessManager;
55};
56
58{
59public:
62
63 void registerProcess(Process *proc);
64
65 static ProcessManager *instance();
66
67 int writePipe() const;
68
69 const struct sigaction &oldsa() const;
70
71private:
72 static ProcessManager *self_;
73
74 void sighandler();
75
76 std::list<Process *> processes_;
77
78 struct sigaction oldsa_;
79
80 EventNotifier *sigEvent_;
81 UniqueFD pipe_[2];
82};
83
84} /* namespace libcamera */
Notify of activity on a file descriptor.
Definition: event_notifier.h:20
Manager of processes.
Definition: process.h:58
static ProcessManager * instance()
Retrieve the Process manager instance.
Definition: process.cpp:163
int writePipe() const
Retrieve the Process manager's write pipe.
Definition: process.cpp:175
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:187
Process object.
Definition: process.h:22
void kill()
Kill the process.
Definition: process.cpp:371
int exitCode() const
Retrieve the exit code of the process.
Definition: process.h:38
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:239
ExitStatus
Exit status of process.
Definition: process.h:24
@ NormalExit
Definition: process.h:26
@ NotExited
Definition: process.h:25
@ SignalExit
Definition: process.h:27
Signal< enum ExitStatus, int > finished
Definition: process.h:42
ExitStatus exitStatus() const
Retrieve the exit status of the process.
Definition: process.h:37
Generic signal and slot communication mechanism.
Definition: signal.h:39
unique_ptr-like wrapper for a file descriptor
Definition: unique_fd.h:18
Top-level libcamera namespace.
Definition: backtrace.h:17
Signal & slot implementation.
File descriptor wrapper that owns a file descriptor.