libzypp
17.37.17
ShutdownLock.cc
Go to the documentation of this file.
1
#include "
ShutdownLock_p.h
"
2
3
#include <
zypp-core/base/LogTools.h
>
4
#include <
zypp-core/ExternalProgram.h
>
5
#include <iostream>
6
#include <signal.h>
7
8
zypp::ShutdownLock::ShutdownLock
(
const
std::string &who,
const
std::string &reason)
9
{
10
try
{
11
MIL
<<
"Try to acquire an inhibitor lock..."
<< endl;
12
std::string whoStr =
str::form
(
"--who=%s"
, who.c_str());
13
std::string whyStr =
str::form
(
"--why=%s"
, reason.c_str());
14
15
const
char
* argv[] =
16
{
17
"/usr/bin/systemd-inhibit"
,
18
"--what=sleep:shutdown:idle"
,
19
whoStr.c_str(),
20
"--mode=block"
,
21
whyStr.c_str(),
22
"/usr/bin/cat"
,
23
NULL
24
};
25
_prog
=
shared_ptr<ExternalProgramWithSeperatePgid>
(
new
ExternalProgramWithSeperatePgid
( argv,
ExternalProgram::Discard_Stderr
) );
26
}
catch
(...) {
27
}
28
}
29
30
zypp::ShutdownLock::~ShutdownLock
()
31
{
32
if
(
_prog
) {
33
MIL
<<
"Terminate inhibitor lock: pid "
<<
_prog
->getpid() << endl;
34
_prog
->kill( SIGTERM );
35
if
( !
_prog
->waitForExit( 10 * 1000 ) ) {
36
// do a real kill if the app does not close in 10 seconds
37
WAR
<<
"systemd-inhibit did not respond to SIGTERM, killing it"
<< std::endl;
38
_prog
->kill();
39
}
else
{
40
_prog
->close();
41
}
42
}
43
}
ShutdownLock_p.h
shared_ptr
zypp::ExternalProgramWithSeperatePgid
ExternalProgram extended to change the progress group ID after forking.
Definition
ExternalProgram.h:312
zypp::ExternalProgram::Discard_Stderr
@ Discard_Stderr
Definition
ExternalProgram.h:76
zypp::ShutdownLock::~ShutdownLock
~ShutdownLock()
Definition
ShutdownLock.cc:30
zypp::ShutdownLock::_prog
shared_ptr< ExternalProgramWithSeperatePgid > _prog
Definition
ShutdownLock_p.h:38
zypp::ShutdownLock::ShutdownLock
ShutdownLock(const std::string &who, const std::string &reason)
Definition
ShutdownLock.cc:8
zypp::str::form
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
Definition
String.cc:39
ExternalProgram.h
LogTools.h
MIL
#define MIL
Definition
Logger.h:100
WAR
#define WAR
Definition
Logger.h:101
zypp-core
ShutdownLock.cc
Generated by
1.14.0