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();
93 std::optional<Pipe> stderrPipe;
97 d->_sigFailedToStart.emit();
100 stderr_fd = stderrPipe->writeFd;
102 stderr_fd = stdoutPipe->writeFd;
105 if ( d->_spawnEngine->start( argv, stdinPipe->readFd, stdoutPipe->writeFd, stderr_fd ) ) {
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 );
119 d->_stdoutFd = std::move( stdoutPipe->readFd );
121 std::vector<int> rFds { d->_stdoutFd };
123 d->_stderrFd = std::move( stderrPipe->readFd );
124 rFds.push_back( d->_stderrFd.value() );
127 if ( !
openFds( rFds, d->_stdinFd ) ) {
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();
196 return d_func()->_spawnEngine->setChroot(
chroot );
201 return d_func()->_spawnEngine->useDefaultLocale();
206 return d_func()->_spawnEngine->setUseDefaultLocale( defaultLocale );
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;
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
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()
MemSignal< Process, void(int)> _sigFinished
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
void setOutputChannelMode(const OutputChannelMode &outputChannelMode)
void setDieWithParent(bool enabled)