added the App::on_guarded_child() callback method

This commit is contained in:
hyung-hwan 2021-07-24 12:43:15 +00:00
parent 6f6b82687a
commit 94e4cb6d4f
8 changed files with 27 additions and 15 deletions

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_SI_APP_H_
#define _QSE_SI_APP_H_
#ifndef _QSE_SI_APP_HPP_
#define _QSE_SI_APP_HPP_
#include <qse/Types.hpp>
#include <qse/Uncopyable.hpp>
@ -59,6 +59,7 @@ class App: public Uncopyable, public Types, public Mmged, public Named<32>
{
public:
typedef QSE::Bitset<QSE_NSIGS> SignalSet;
typedef long int child_pid_t;
enum SignalState
{
@ -220,7 +221,7 @@ private:
};
_SigLink _sig[QSE_NSIGS];
long int _guarded_child_pid;
child_pid_t _guarded_child_pid;
qse_cmgr_t* _cmgr;
struct log_t
@ -245,6 +246,15 @@ private:
static void handle_signal (int sig) QSE_CPP_NOEXCEPT;
static int put_char_to_log_buf (qse_char_t c, void* ctx) QSE_CPP_NOEXCEPT;
protected:
enum guarded_child_state_t
{
GUARDED_CHILD_STARTED,
GUARDED_CHILD_EXITED
};
void on_guarded_child (child_pid_t pid, guarded_child_state_t state, int status) QSE_CPP_NOEXCEPT {};
};
/////////////////////////////////

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_SI_CONDITION_CLASS_
#define _QSE_SI_CONDITION_CLASS_
#ifndef _QSE_SI_CONDITION_HPP_
#define _QSE_SI_CONDITION_HPP_
#include <qse/si/cnd.h>
#include <qse/si/Mutex.hpp>

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_SI_MUTEX_CLASS_
#define _QSE_SI_MUTEX_CLASS_
#ifndef _QSE_SI_MUTEX_HPP_
#define _QSE_SI_MUTEX_HPP_
#include <qse/Types.hpp>
#include <qse/Uncopyable.hpp>

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_SI_PATH_CLASS_
#define _QSE_SI_PATH_CLASS_
#ifndef _QSE_SI_PATH_HPP_
#define _QSE_SI_PATH_HPP_
#include <qse/Types.hpp>
#include <qse/cmn/Mmged.hpp>

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_SI_SPINLOCK_CLASS_
#define _QSE_SI_SPINLOCK_CLASS_
#ifndef _QSE_SI_SPINLOCK_HPP_
#define _QSE_SI_SPINLOCK_HPP_
#include <qse/Types.hpp>
#include <qse/Uncopyable.hpp>

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_SI_TCPSERVER_CLASS_
#define _QSE_SI_TCPSERVER_CLASS_
#ifndef _QSE_SI_TCPSERVER_HPP_
#define _QSE_SI_TCPSERVER_HPP_
#include <qse/si/Socket.hpp>
#include <qse/si/SocketAddress.hpp>

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_SI_THREAD_CLASS_
#define _QSE_SI_THREAD_CLASS_
#ifndef _QSE_SI_THREAD_HPP_
#define _QSE_SI_THREAD_HPP_
#include <qse/si/thr.h>
#include <qse/si/os.h>

View File

@ -543,6 +543,7 @@ int App::guardProcess (const SignalSet& signals, bool _guard, qse_mtime_t guard_
// the guardian(parent) process
// ===============================================
this->_guarded_child_pid = pid;
this->on_guarded_child (pid, GUARDED_CHILD_STARTED, 0);
int status;
while (::waitpid(pid, &status, 0) != pid)
@ -555,6 +556,7 @@ int App::guardProcess (const SignalSet& signals, bool _guard, qse_mtime_t guard_
// ------------------------------------------------------
}
this->on_guarded_child (pid, GUARDED_CHILD_EXITED, status);
if (WIFEXITED(status))
{
if (WEXITSTATUS(status) == 0)