3#include <zypp-core/zyppng/base/EventDispatcher>
5#include <zypp-core/zyppng/io/AsyncDataSource>
51 return std::shared_ptr<Process>(
new Process() );
57 if (
d->_spawnEngine->pid() >= 0 ) {
59 DBG <<
"Process destroyed while still running removing from EventLoop." << std::endl;
68 ERR <<
"A valid EventDispatcher needs to be registered before starting a Process" << std::endl;
82 d->_sigFailedToStart.emit();
88 d->_sigFailedToStart.emit();
97 d->_sigFailedToStart.emit();
108 const auto pid =
d->_spawnEngine->pid( );
113 d->_spawnEngine->notifyExited( status );
114 d->_sigFinished.emit(
d->_spawnEngine->exitStatus() );
118 d->_stdinFd = std::move(
stdinPipe->writeFd );
121 std::vector<int>
rFds {
d->_stdoutFd };
124 rFds.push_back(
d->_stderrFd.value() );
132 d->_sigStarted.emit();
135 d->_sigFailedToStart.emit();
143 ::kill(
d->_spawnEngine->pid(), signal );
150 return (
d->_spawnEngine->pid() > -1 );
164 if (
d->_spawnEngine->isRunning() ) {
168 d->_spawnEngine->isRunning(
true );
181 return d_func()->_spawnEngine->executedCommand();
186 return d_func()->_spawnEngine->execError();
191 return d_func()->_spawnEngine->chroot();
201 return d_func()->_spawnEngine->useDefaultLocale();
211 return d_func()->_spawnEngine->environment();
216 return d_func()->_spawnEngine->setEnvironment(
env );
221 return d_func()->_spawnEngine->pid();
226 return d_func()->_spawnEngine->exitStatus();
231 return d_func()->_spawnEngine->dieWithParent();
236 return d_func()->_spawnEngine->setDieWithParent( enabled );
241 return d_func()->_spawnEngine->switchPgid();
246 return d_func()->_spawnEngine->setSwitchPgid( enabled );
251 return d_func()->_spawnEngine->workingDirectory();
256 return d_func()->_spawnEngine->setWorkingDirectory(
wd );
261 return d_func()->_spawnEngine->fdsToMap();
266 return d_func()->_spawnEngine->addFd(
fd );
271 return d_func()->_stdinFd;
276 return d_func()->_stdoutFd;
281 return d_func()->_stderrFd;
286 return d_func()->_sigStarted;
291 return d_func()->_sigFailedToStart;
296 return d_func()->_sigFinished;
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
static std::unique_ptr< zyppng::AbstractSpawnEngine > createDefaultEngine()
bool openFds(const std::vector< int > &readFds, int writeFd=-1)
virtual void closeWriteChannel()
static std::shared_ptr< EventDispatcher > instance()
std::unique_ptr< AbstractSpawnEngine > _spawnEngine
Signal< void()> _sigFailedToStart
ProcessPrivate(Process &p)
Process::OutputChannel _currentChannel
Process::OutputChannelMode _channelMode
MemSignal< Process, void(int)> _sigFinished
Signal< void()> _sigStarted
OutputChannelMode outputChannelMode() const
std::map< std::string, std::string > Environment
For passing additional environment variables to set.
zypp::Pathname chroot() const
bool dieWithParent() const
void setEnvironment(const Environment &environment)
void stop(int signal=SIGTERM)
void closeWriteChannel() override
const std::string & executedCommand() const
bool start(const char *const *argv)
bool useDefaultLocale() const
void setWorkingDirectory(const zypp::Pathname &workingDirectory)
SignalProxy< void()> sigStarted()
const std::vector< int > & fdsToMap() const
void setUseDefaultLocale(bool defaultLocale)
void setSwitchPgid(bool enabled)
void setChroot(const zypp::Pathname &chroot)
void setOutputChannelMode(const OutputChannelMode &outputChannelMode)
zypp::Pathname workingDirectory() const
void setDieWithParent(bool enabled)
SignalProxy< void()> sigFailedToStart()
SignalProxy< void(int)> sigFinished()
Environment environment() const
const std::string & execError() const
Namespace intended to collect all environment variables we use.
AutoDispose<int> calling ::close
static std::optional< Pipe > create(int flags=0)
#define ZYPP_IMPL_PRIVATE(Class)