3 #include <zypp-core/zyppng/base/EventDispatcher> 5 #include <zypp-core/zyppng/io/AsyncDataSource> 49 return std::shared_ptr<Process>(
new Process() );
55 if ( d->_spawnEngine->pid() >= 0 ) {
57 DBG <<
"Process destroyed while still running removing from EventLoop." << std::endl;
66 ERR <<
"A valid EventDispatcher needs to be registered before starting a Process" << std::endl;
80 d->_sigFailedToStart.emit();
86 d->_sigFailedToStart.emit();
91 std::optional<Pipe> stderrPipe;
95 d->_sigFailedToStart.emit();
98 stderr_fd = stderrPipe->writeFd;
100 stderr_fd = stdoutPipe->writeFd;
103 if ( d->_spawnEngine->start( argv, stdinPipe->readFd, stdoutPipe->writeFd, stderr_fd ) ) {
106 const auto pid = d->_spawnEngine->pid( );
111 d->_spawnEngine->notifyExited( status );
112 d->_sigFinished.emit( d->_spawnEngine->exitStatus() );
116 d->_stdinFd = std::move( stdinPipe->writeFd );
117 d->_stdoutFd = std::move( stdoutPipe->readFd );
119 std::vector<int> rFds { d->_stdoutFd };
121 d->_stderrFd = std::move( stderrPipe->readFd );
122 rFds.push_back( d->_stderrFd.value() );
125 if ( !
openFds( rFds, d->_stdinFd ) ) {
130 d->_sigStarted.emit();
133 d->_sigFailedToStart.emit();
141 ::kill( d->_spawnEngine->pid(), signal );
148 return ( d->_spawnEngine->pid() > -1 );
162 if ( d->_spawnEngine->isRunning() ) {
166 d->_spawnEngine->isRunning(
true );
179 return d_func()->_spawnEngine->executedCommand();
184 return d_func()->_spawnEngine->execError();
189 return d_func()->_spawnEngine->chroot();
194 return d_func()->_spawnEngine->setChroot(
chroot );
199 return d_func()->_spawnEngine->useDefaultLocale();
204 return d_func()->_spawnEngine->setUseDefaultLocale( defaultLocale );
209 return d_func()->_spawnEngine->environment();
214 return d_func()->_spawnEngine->setEnvironment(
env );
219 return d_func()->_spawnEngine->pid();
224 return d_func()->_spawnEngine->exitStatus();
229 return d_func()->_spawnEngine->dieWithParent();
234 return d_func()->_spawnEngine->setDieWithParent( enabled );
239 return d_func()->_spawnEngine->switchPgid();
244 return d_func()->_spawnEngine->setSwitchPgid( enabled );
249 return d_func()->_spawnEngine->workingDirectory();
254 return d_func()->_spawnEngine->setWorkingDirectory( wd );
259 return d_func()->_spawnEngine->fdsToMap();
264 return d_func()->_spawnEngine->addFd( fd );
269 return d_func()->_stdinFd;
274 return d_func()->_stdoutFd;
279 return d_func()->_stderrFd;
284 return d_func()->_sigStarted;
289 return d_func()->_sigFailedToStart;
294 return d_func()->_sigFinished;
Environment environment() const
zypp::Pathname chroot() const
Namespace intended to collect all environment variables we use.
void setEnvironment(const Environment &environment)
const std::vector< int > & fdsToMap() const
SignalProxy< void()> sigStarted()
void setChroot(const zypp::Pathname &chroot)
void closeWriteChannel() override
SignalProxy< void(int)> sigFinished()
static std::unique_ptr< zyppng::AbstractSpawnEngine > createDefaultEngine()
OutputChannelMode outputChannelMode() const
Signal< void()> _sigFailedToStart
std::shared_ptr< Process > Ptr
bool dieWithParent() const
void setWorkingDirectory(const zypp::Pathname &workingDirectory)
bool start(const char *const *argv)
void setSwitchPgid(bool enabled)
AutoDispose<int> calling ::close
SignalProxy< void()> sigFailedToStart()
const std::string & execError() const
std::unique_ptr< AbstractSpawnEngine > _spawnEngine
std::map< std::string, std::string > Environment
For passing additional environment variables to set.
Signal< void()> _sigStarted
zypp::Pathname workingDirectory() const
static std::shared_ptr< EventDispatcher > instance()
void setUseDefaultLocale(bool defaultLocale)
Process::OutputChannelMode _channelMode
Process::OutputChannel _currentChannel
virtual void closeWriteChannel()
ProcessPrivate(Process &p)
static std::optional< Pipe > create(int flags=0)
void stop(int signal=SIGTERM)
ZYPP_IMPL_PRIVATE(UnixSignalSource)
bool useDefaultLocale() const
bool openFds(const std::vector< int > &readFds, int writeFd=-1)
const std::string & executedCommand() const
Signal< void(int)> _sigFinished
void setOutputChannelMode(const OutputChannelMode &outputChannelMode)
void setDieWithParent(bool enabled)