summaryrefslogtreecommitdiffstats
path: root/systemservice/interface_unified/library/include/system_service/ss_system_process.h
diff options
context:
space:
mode:
Diffstat (limited to 'systemservice/interface_unified/library/include/system_service/ss_system_process.h')
-rw-r--r--systemservice/interface_unified/library/include/system_service/ss_system_process.h1118
1 files changed, 1118 insertions, 0 deletions
diff --git a/systemservice/interface_unified/library/include/system_service/ss_system_process.h b/systemservice/interface_unified/library/include/system_service/ss_system_process.h
new file mode 100644
index 00000000..a4ae743a
--- /dev/null
+++ b/systemservice/interface_unified/library/include/system_service/ss_system_process.h
@@ -0,0 +1,1118 @@
+/*
+ * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+///////////////////////////////////////////////////////////////////////////////
+/// \ingroup tag_SystemServicesIf
+/// \brief This file supports the System Manager OS process abstraction.
+///
+///////////////////////////////////////////////////////////////////////////////
+/**
+ * @file ss_system_process.h
+ */
+/** @addtogroup BaseSystem
+ * @{
+ */
+/** @addtogroup system_service
+ * @ingroup BaseSystem
+ * @{
+ */
+/** @addtogroup interface_unified
+ * @ingroup system_service
+ * @{
+ */
+#ifndef __Process_H__ // NOLINT (build/header_guard)
+#define __Process_H__
+
+#include <spawn.h>
+#include <native_service/frameworkunified_types.h>
+#include <native_service/cl_process.h>
+#include <system_service/ss_system_types.h>
+#include <signal.h>
+#include <vector>
+#include <string>
+#include <map>
+
+const long lProcess_VALIDATION_VALUE = 2198645; // NOLINT (runtime/int)
+// Used to define a unique value that represents this class.
+// This value is stored in the object when the object is created,
+// and cleared when the object is destroyed.
+
+const int iProcess_DEFAULT_PROCESS_PRIORITY = 10;
+// This is the default process priority that all new processes will use.
+
+const int iProcess_MAXIMUM_PROCESS_PRIORITY = 60;
+// This is the maximum priority a process can have
+
+const long iProcess_DEFAULT_PROCESS_FLAGS = POSIX_SPAWN_SETSCHEDULER // NOLINT (runtime/int)
+ | POSIX_SPAWN_SETSCHEDPARAM;
+
+// This flag field is a bit wise OR of spawning options to use when a process
+// is created.
+
+const int iProcess_MAXIMUM_NUMBER_OF_PROCESS_ARGUMENTS = 25;
+// This is the maximum number of command line (i.e. argv[]) arguments we can
+// send to a process. This includes; exectuable file name + process arguments + NULL
+
+const int iProcess_MAXIMUM_PROCESS_NAME_LENGTH = 32;
+// This is the maximum number of characters that a process name can be in bytes.
+
+class Process;
+
+typedef std::map<SS_String, Process *> ProcessMap;
+
+/**
+ * @class TimerCtrl
+ * \~english @brief OS process
+ * \~english @par Brief Introduction
+ * This class is the System Manager OS process abstraction.
+ *
+ */
+class Process {
+ public:
+ enum eProcessLoadMode {
+ WAIT, // The invoked program is loaded into available memory, is executed,
+ // and then the original program resumes execution.
+ NOWAIT, // Causes the current program to execute concurrently with the new child process.
+ };
+
+ enum eProcessSchedulingPolicy {
+ FIFO, // A fixed priority scheduler in which the highest ready process runs until it
+ // blocks or is preempted by a higher priority process.
+ ROUND_ROBIN, // The same as FIFO, except processes at the same priority level time-slice.
+ OTHER // A general time sharing scheduler in which a process decays in priority if it
+ // consumes too much processor before blocking. It reverts to its default priority
+ // when it blocks. Should it fail to run over a 2 second period and it has decayed
+ // then it's boosted one priority level up to a maximum of its default priority.
+ };
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup Process
+ /// \~english @par Summary
+ /// - Default Constructor, called when the class is instantiated.
+ /// \~english @param [in] - cpu_assign
+ /// - Assignment information of CPU.
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - initialize all var
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - initialize all var in class as default value
+ /// \~english @see ~Process
+ ////////////////////////////////////////////////////////////////////////////////////
+ Process(int cpu_assign = 0x0);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup Process
+ /// \~english @par Summary
+ /// - Copy Constructor
+ /// \~english @param [in] - p_rhs_i
+ /// - Process - Reference to a Process that you want to copy.
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Used to create an object and copy another object to the new object.
+ /// \~english @see ~Process
+ ////////////////////////////////////////////////////////////////////////////////////
+ Process(const Process& p_rhs_i);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup ~Process
+ /// \~english @par Summary
+ /// - Destructor function
+ /// \~english @param None
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - set m_lValidationTag with 0
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Destructor, called when the object is destroyed.\n
+ /// set m_lValidationTag with 0 and kill process.
+ /// \~english @see Process
+ ////////////////////////////////////////////////////////////////////////////////////
+ virtual ~Process();
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup operator=
+ /// \~english @par Summary
+ /// - Assignment Operator
+ /// \~english @param [in]
+ /// \~english @retval Process - New Process object
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Assignment Operator, called when one object is assigned to another object.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ Process& operator=(const Process& p_rhs_i);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup GetProcessId
+ /// \~english @par Summary
+ /// - get process id
+ /// \~english @param None
+ /// \~english @retval process pid - the process pid of the process running.
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - This method will return to the caller the PosixBasedOS001 Specific Process ID.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ int const GetProcessId(void) {
+ return static_cast<int>(m_tProcessId);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SetCallingArgumentList
+ /// \~english @par Summary
+ /// - This method will set the calling argument list that this object represents
+ /// \~english @param [in] p_pcArgv_i
+ /// - const char *[] - Pointer to array of null terminated parameter list.
+ /// \~english @param [in] p_iArgc_i
+ /// - const int - - Number of arguments in the array passed.
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - put the new arguments into m_strlstArgv
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Set the executable filename first. This is always the 1st argument
+ /// - in the argument list. Then set the argument list for the process
+ /// - which is held in m_strlstArgv.
+ /// - First make sure that the argument list is empty.
+ /// - Once empty, put the new arguments into the list
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void SetCallingArgumentList(const char *p_pcArgv_i[], const int p_iArgc_i);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SetCallingArgumentList
+ /// \~english @par Summary
+ /// - This method will set the calling argument list that this object represents.
+ /// \~english @param [in] p_strlstParameters_i
+ /// - const StringList& - String list of arguments that will be used to start.
+ /// \~english @retval None.
+ /// \~english @par Preconditions
+ /// - no preconditions.
+ /// \~english @par Change of the internal state
+ /// - set m_strlstArgv with p_strlstParameters_i.
+ /// \~english @par Causes of failures
+ /// - None.
+ /// \~english @par Classification
+ /// - Public.
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - if p_strlstParameters_i is not empty,then clear m_strlstArgv \n
+ /// - and set m_strlstArgv with p_strlstParameters_i.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void SetCallingArgumentList(const StringList& p_strlstParameters_i);
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup GetExecutableFileName
+/// \~english @par Summary
+/// - Get executable file name
+/// \~english @param None
+/// \~english @retval Pointer
+/// - Points to SS_String object that holds the path and executable file name for this process
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - None
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will return a pointer to the executable filename that this object represents
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ const char * const GetExecutableFileName() {
+ return m_strFile.c_str();
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup GetProcessReturnCode
+ /// \~english @par Summary
+ /// - This function will return the processes exit/return code.
+ /// \~english @param None
+ /// \~english @retval process exit code - Code for the last process to execute
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - set m_iReturnCode with WEXITSTATUS(iProcessReturn)
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - This function will return the processes exit/return code.\n
+ /// This is not the value of ERRNO as returned by GetLastPosixBasedOS001ErrorCode().
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ int GetProcessReturnCode(void);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SetSchedulingPolicy
+ /// \~english @par Summary
+ /// - This method will change the scheduling policy for the process this object represents.
+ /// \~english @param [in] p_eSchedulingPolicy_i
+ /// - const eProcessSchedulingPolicy - Scheduling Policy for this process
+ /// \~english @par
+ /// - eProcessSchedulingPolicy
+ /// \~english @code
+ /// - enum eProcessSchedulingPolicy {
+ /// FIFO, A fixed priority scheduler in which the highest ready process runs until it\n
+ /// blocks or is preempted by a higher priority process.
+ /// ROUND_ROBIN, The same as FIFO, except processes at the same priority level time-slice.
+ /// OTHER A general time sharing scheduler in which a process decays in priority if it\n
+ /// consumes too much processor before blocking. It reverts to its default priority\n
+ /// when it blocks. Should it fail to run over a 2 second period and it has decayed\n
+ /// then it's boosted one priority level up to a maximum of its default priority.
+ /// };
+ /// @endcode
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// -If the result of function is not 0,then set m_iErrorCode with errno
+ /// - else set m_iErrorCode with 0.
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Attempt to change the scheduling policy for the process that this object
+ /// represents. If the change fails, restore the previous settings.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void SetSchedulingPolicy(
+ const eProcessSchedulingPolicy p_eSchedulingPolicy_i);
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup GetSchedulingPolicy
+/// \~english @par Summary
+/// - Get currently configured scheduling policy
+/// \~english @param None
+/// \~english @retval FIFO - A fixed priority scheduler in which the highest ready process runs until it\n
+/// blocks or is preempted by a higher priority process.
+/// \~english @retval ROUND_ROBIN - The same as FIFO, except processes at the same priority level time-slice.
+/// \~english @retval OTHER - A general time sharing scheduler in which a process decays in priority if it\n
+/// consumes too much processor before blocking. It reverts to its default priority\n
+/// when it blocks. Should it fail to run over a 2 second period and it has decayed\n
+/// then it's boosted one priority level up to a maximum of its default priority.
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - If the result of calling function sched_getscheduler(m_tProcessId) is -1
+/// then set m_iErrorCode with errno
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will return to the caller the currently configured process scheduling policy.
+/// If the result of calling function sched_getscheduler(m_tProcessId) is -1,
+/// then return ROUND_ROBIN.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ eProcessSchedulingPolicy const GetSchedulingPolicy(void);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SetPriority
+ /// \~english @par Summary
+ /// - This method will change the priority for the process this object represents.
+ /// \~english @param [in] p_iPriority_i
+ /// - int - Priority of the process
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - If the result of function sched_setparam(m_tProcessId, &cur_sch_params)\n
+ /// is -1,then set m_iErrorCode with errno, else set m_iErrorCode with 0.
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Using p_iPriority_i to change the priority for the process\n
+ /// this object represents,if the result of function \n
+ /// sched_setparam(m_tProcessId, &cur_sch_params) is -1
+ /// m_iErrorCode will be seted with errno,else be seted with 0
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void SetPriority(const int p_iPriority_i);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SetPriority Notice:Can't find the body of this function
+ /// \~english @par Summary
+ /// - This method will change the priority for the specified process ID.
+ /// \~english @param [in] p_iPid_i
+ /// - pid_t - PID of the process to change the priority
+ /// \~english @param [in] p_iPriority_i
+ /// - int - Priority of the process
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// -
+ /// \~english @par Causes of failures
+ /// -
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// -none
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void SetPriority(const pid_t p_iPid_i, const int p_iPriority_i);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup IncreasePriorityByOne
+ /// \~english @par Summary
+ /// - This method will increase the priority for the process this\n
+ /// object represents by one.
+ /// \~english @param None
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Retrieve the current priority of the process. Check to see if already at max.\n
+ /// If so just return. Otherwise increase by one and set the priority...
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void IncreasePriorityByOne(void);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup DecreasePriorityByOne
+ /// \~english @par Summary
+ /// - This method will decrease the priority for the process this object represents by one.
+ /// \~english @param None
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no precondition
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - Retrieve the current priority of the process. Check to see if already at minimum.
+ /// If so just return. Otherwise decrease by one and set the priority...
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void DecreasePriorityByOne(void);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup GetPriority
+ /// \~english @par Summary
+ /// - This method will return to the caller the currently configured process priority.
+ /// \~english @param None
+ /// \~english @retval int priority - process priority
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - If the result of function sched_getparam(m_tProcessId, &cur_sch_params) is less than -1,\n
+ /// then m_iErrorCode will be seted with errno.
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - If the result of function sched_getparam(m_tProcessId, &cur_sch_params)\n
+ /// is less than -1,will be return -1,else return Currently configured process priority.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ int const GetPriority(void);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SetProcessName
+ /// \~english @par Summary
+ /// - This method will set this objects process name member variable to the provided string value.
+ /// \~english @param [in] p_strProcessName_i
+ /// - SS_String - Process Name to set the m_strProcessName member variable to
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - Using p_strProcessName_i to set m_strProcessName
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - This method will set this objects process name member variable to the provided string value.\n
+ /// If the user of this object wishes to register the name with PosixBasedOS001 OS,\n
+ /// the AttachName() method should be called.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void SetProcessName(const SS_String& p_strProcessName_i);
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup GetProcessName
+ /// \~english @par Summary
+ /// - Get process name
+ /// \~english @param None
+ /// \~english @retval SS_String - Process Name
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - This method will return to the caller the registered name of this process.\n
+ /// been registered with the OS, a NULL string will be returned. If a name has not
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ SS_String GetProcessName(void) const {
+ return m_strProcessName;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup CreateProcess
+ /// \~english @par Summary
+ /// - This method will create a process with the executable provided and \n
+ /// mode as a calling parameter.The caller can also provide a list of arguments \n
+ /// that will be provided to the executable at startup.
+ /// \~english @param [in] p_strFile_i
+ /// - SS_String - Path and Filename of executable to create process for
+ /// \~english @param [in] p_strlstArgv_i
+ /// - StringList - List of ARGV values for new process
+ /// \~english @param [in] p_eMode_i
+ /// - eProcessLoadMode - Mode to create and load new process
+ /// \~english @param [in] p_strProcessName_i
+ /// - SS_String - This is the name that will be registered to the OS for this process
+ /// \~english @param [in] p_eSchedulingPolicy_i
+ /// - eProcessSchedulingPolicy
+ /// \~english @param [in] p_iPriority_i
+ /// - int - Priority for this process
+ /// \~english @param [in] unix_user_name
+ /// - char* - unix user name
+ /// \~english @param [in] p_lSpawnFlags_i
+ /// - long - Spawning flags. These are PosixBasedOS001 specific....
+ /// \~english @par
+ /// eProcessLoadMode enum
+ /// \~english @code
+ /// - enum eProcessLoadMode {
+ /// WAIT, //The invoked program is loaded into available memory, is executed,
+ /// //and then the original program resumes execution.
+ /// NOWAIT, // Causes the current program to execute concurrently with the new child process.
+ /// };
+ /// @endcode
+ /// \~english @par
+ /// eProcessSchedulingPolicy enum
+ /// \~english @code
+ /// - enum eProcessSchedulingPolicy {
+ /// FIFO, // A fixed priority scheduler in which the highest ready process runs until it
+ /// // blocks or is preempted by a higher priority process.
+ /// ROUND_ROBIN, // The same as FIFO, except processes at the same priority level time-slice.
+ /// OTHER // A general time sharing scheduler in which a process decays in priority if it
+ /// // consumes too much processor before blocking. It reverts to its default priority
+ /// // when it blocks. Should it fail to run over a 2 second period and it has decayed
+ /// // then it's boosted one priority level up to a maximum of its default priority.
+ /// };
+ /// @endcode
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - set m_iErrorCode with 0
+ /// set m_iReturnCode with 0
+ /// set m_eProcessLoadMode with p_eMode_i;
+ /// set m_strFile with p_strFile_i;
+ /// set m_strProcessName with p_strProcessName_i;
+ /// use the result of function CL_ProcessCreate() to set m_tProcessId
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// -This method will create a PosixBasedOS001 process with the executable provided\n
+ /// and mode as a calling parameter.The caller can also provide a list of arguments\n
+ /// that will be provided to the executable at startup.The calling p_strProcessName \m
+ /// parameter is a textual name that will be associated with the newly created process\n
+ /// by the OS. The process state information will be maintained by this object.\n
+ /// Upon successful creation of the process, the scheduling policy and priority\n
+ /// of the process will be set to the provided values. The user can change these\n
+ /// values through the SetSchedulingPolicy() and SetPriority() method calls.\n
+ /// Using unix_user_name to get uid and gid,set uid and gid when calling\n
+ /// CL_ProcessCreateAttrSetUid() and CL_ProcessCreateAttrSetGid\n
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcess(const SS_String& p_strFile_i, // Path and Filename of executable to create process for
+ const StringList& p_strlstArgv_i, // List of ARGV values for new process
+ const eProcessLoadMode p_eMode_i, // Mode to create and load new process
+ const SS_String& p_strProcessName_i, // This is the name that will be registered to the OS for this process
+ const eProcessSchedulingPolicy p_eSchedulingPolicy_i, // Scheduling Policy for this process
+ const int p_iPriority_i, // Priority for this process
+ const char* unix_user_name, const long p_lSpawnFlags_i); // Spawning flags. These are PosixBasedOS001 specific.... // NOLINT (runtime/int)
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup CreateProcess
+ /// \~english @par Summary
+ /// - This method will create a PosixBasedOS001 process with the executable\n
+ /// provided and mode as a calling parameter.
+ /// \~english @param [in] p_strFile_i
+ /// - SS_String - Path and Filename of executable to create process for
+ /// \~english @param [in] p_strProcessName_i
+ /// - SS_String - This is the name that will be registered to the OS for this process
+ /// \~english @param [in] unix_user_name
+ /// - char* - unix user name
+ /// \~english @param [in] p_lSpawnFlags_i
+ /// - long - Posix Spawning flags. These are PosixBasedOS001 specific
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - The caller can also provide a list of arguments that will be provided\n
+ /// to the executable at startup.The calling p_strProcessName parameter is a textual name\n
+ /// that will be associated with the newly created process by the OS.\n
+ /// The process state information will be maintained by this object.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcess(const SS_String& p_strFile_i, // Path and Filename of executable to create process for
+ const SS_String& p_strProcessName_i, // This is the name that will be registered to the OS for this process
+ const char* unix_user_name = NULL, const long p_lSpawnFlags_i = // NOLINT (runtime/int)
+ iProcess_DEFAULT_PROCESS_FLAGS); // Spawning flags.
+ // These are PosixBasedOS001 specific....
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup CreateProcess
+ /// \~english @par Summary
+ /// - This method will create a process with the executable
+ /// provided and mode as a calling parameter.
+ /// \~english @param [in] p_strFile_i
+ /// - SS_String - Path and Filename of executable to create
+ /// process for
+ /// \~english @param [in] p_strProcessName_i
+ /// - SS_String - This is the name that will be registered to the
+ /// OS for this process
+ /// \~english @param [in] p_iPriority_i
+ /// - int - Priority of process
+ /// \~english @param [in] unix_user_name
+ /// - char* - unix user name
+ /// \~english @param [in] p_lSpawnFlags_i
+ /// - long - Posix Spawning flags. These are PosixBasedOS001
+ /// specific
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - The caller can also provide a list of arguments that will be
+ /// provided\n
+ /// to the executable at startup.The calling p_strProcessName
+ /// parameter is a textual name\n
+ /// that will be associated with the newly created process by
+ /// the OS.\n
+ /// The process state information will be maintained by this
+ /// object.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcess(const SS_String& p_strFile_i, // Path and Filename of executable to create process for
+ const SS_String& p_strProcessName_i, // This is the name that will be registered to the OS for this process
+ const int p_iPriority_i, // Priority of this process
+ const char* unix_user_name = NULL, const long p_lSpawnFlags_i = // NOLINT (runtime/int)
+ iProcess_DEFAULT_PROCESS_FLAGS); // Spawning flags.
+ // These are PosixBasedOS001 specific....
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup CreateProcess
+/// \~english @par Summary
+/// - This method will create a process with the executable provided and mode as a calling parameter.
+/// \~english @param [in] p_strFile_i
+/// - SS_String - p_strFile_i Path and Filename of executable to create process for
+/// \~english @param [in] unix_user_name
+/// - char* - unix user name
+/// \~english @param [in] p_lSpawnFlags_i
+/// - long - Spawning flags. These are PosixBasedOS001 specific.
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -
+/// \~english @par Change of the internal state
+/// - None
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - The caller can also provide a list of arguments that will be provided\n
+/// to the executable at startup.The calling p_strProcessName parameter is a textual name\n
+/// that will be associated with the newly created process by the OS.\n
+/// The process state information will be maintained by this object.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcess(const SS_String& p_strFile_i, // Path and Filename of executable to create process for
+ const char* unix_user_name = NULL, const long p_lSpawnFlags_i = // NOLINT (runtime/int)
+ iProcess_DEFAULT_PROCESS_FLAGS); // Spawning flags.
+ // These are PosixBasedOS001 specific....
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup CreateProcess
+/// \~english @par Summary
+/// - This method will create a process with the executable provided and mode as a calling parameter.
+/// \~english @param [in] p_strFile_i
+/// - SS_String - p_strFile_i Path and Filename of executable to create process for
+/// \~english @param [in] p_strProcessName_i
+/// - SS_String - This is the name that will be registered to the OS for this process
+/// \~english @param [in] p_strlstArgv_i
+/// - StringList - List of ARGV values for new process
+/// \~english @param [in] unix_user_name
+/// - char* - unix user name
+/// \~english @param [in] p_lSpawnFlags_i
+/// - long - Spawning flags. These are PosixBasedOS001 specific.
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - None
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - The caller can also provide a list of arguments that will be provided\n
+/// to the executable at startup.The calling p_strProcessName parameter is a textual name\n
+/// that will be associated with the newly created process by the OS.\n
+/// The process state information will be maintained by this object.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcess(const SS_String& p_strFile_i, // Path and Filename of executable to create process for
+ const SS_String& p_strProcessName_i, // This is the name that will be registered to the OS for this process
+ const StringList& p_strlstArgv_i, // List of ARGV values for new process
+ const char* unix_user_name = NULL, const long p_lSpawnFlags_i = // NOLINT (runtime/int)
+ iProcess_DEFAULT_PROCESS_FLAGS); // Spawning flags.
+ // These are PosixBasedOS001 specific....
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup CreateProcess
+/// \~english @par Summary
+/// - This method will create a process with the executable provided and mode as a calling parameter.
+/// \~english @param [in] p_strFile_i
+/// - SS_String - Path and Filename of executable to create process for
+/// \~english @param [in] p_strProcessName_i
+/// - SS_String - This is the name that will be registered to the OS for this process
+/// \~english @param [in] p_iPriority_i
+/// - int - Priority for this process
+/// \~english @param [in] p_strlstArgv_i
+/// - StringList - List of ARGV values for new process
+/// \~english @param [in] unix_user_name
+/// - char* - unix user name
+/// \~english @param [in] p_lSpawnFlags_i
+/// - long - Spawning flags.These are PosixBasedOS001 specific.
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - None
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - The caller can also provide a list of arguments that will be provided\n
+/// to the executable at startup.The calling p_strProcessName parameter is a textual name\n
+/// that will be associated with the newly created process by the OS.\n
+/// The process state information will be maintained by this object.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcess(const SS_String& p_strFile_i, // Path and Filename of executable to create process for
+ const SS_String& p_strProcessName_i, // This is the name that will be registered to the OS for this process
+ const int p_iPriority_i, // Priority for this process
+ const StringList& p_strlstArgv_i, // List of ARGV values for new process
+ const char* unix_user_name = NULL, const long p_lSpawnFlags_i = // NOLINT (runtime/int)
+ iProcess_DEFAULT_PROCESS_FLAGS); // Spawning flags.
+ // These are PosixBasedOS001 specific....
+ /////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup CreateProcess
+ /// \~english @par Summary
+ /// - This method will create a process with the executable provided and mode as a calling parameter.
+ /// \~english @param [in] p_strFile_i
+ /// - SS_String - Path and Filename of executable to create process for
+ /// \~english @param [in] c_argv
+ /// - char - This is the argument that will be registered to the OS for this process
+ /// \~english @param [in] environment_string
+ /// - char - enviroment for this process
+ /// \~english @param [in] cl_attr
+ /// - CL_ProcessAttr_t - List of ARGV values for new process
+ /// \~english @retval None
+ /// \~english @par Preconditions
+ /// -no preconditions
+ /// \~english @par Change of the internal state
+ /// - None
+ /// \~english @par Causes of failures
+ /// - None
+ /// \~english @par Classification
+ /// - Public
+ /// \~english @par Type
+ /// - sync only
+ /// \~english @par Detail
+ /// - The caller can also provide a list of arguments that will be provided\n
+ /// that will be associated with the newly created process by the OS.\n
+ /// The process state information will be maintained by this object.
+ /// \~english @see None
+ ////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcess(const SS_String* p_str_file, char* const * c_argv,
+ char* environment_string, const CL_ProcessAttr_t *cl_attr);
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup CreateProcessWait
+/// \~english @par Summary
+/// - This method will create a process with the executable provided.
+/// \~english @param [in] p_strFile_i
+/// - SS_String - Path and Filename of executable to create process for
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - None
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will create a process with the executable provided.\n
+/// The process state information will be maintained by this object.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcessWait(const SS_String& p_strFile_i); // Path and Filename of executable to create process for
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup CreateProcessWait
+/// \~english @par Summary
+/// - This method will create a PosixBasedOS001 process with the executable provided.
+/// \~english @param [in] p_strFile_i
+/// - SS_String - Path and Filename of executable to create process for
+/// \~english @param [in] p_strlstArguments_i
+/// - StringList - List of process calling arguments
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - None
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will create a PosixBasedOS001 process with the executable provided.\n
+/// The process state information will be maintained by this object.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void CreateProcessWait(const SS_String& p_strFile_i, // Path and Filename of executable to create process for
+ const StringList& p_strlstArguments_i); // List of process calling arguments
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup KillProcess
+/// \~english @par Summary
+/// - This method will send the specified signal to the process represented by this object
+/// \~english @param [in] signal
+/// - int - signal
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - Intialize the objects m_iErrorCode member variable to 0
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will send the specified signal to the process represented by this object.\n
+/// All variables associated with this object will be initialized to a know value.\n
+/// If this process has a name registered with the OS, that name will be removed.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void KillProcess(int signal = SIGKILL);
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup DoesProcessExist
+/// \~english @par Summary
+/// -Check if the process existed
+/// \~english @param None
+/// \~english @retval TRUE - Process Exists
+/// \~english @retval FALSE - Process does not exist
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - The internal state is not changed.
+/// \~english @par Causes of failures
+/// -None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will return a BOOLean indicating whether this process exists.
+/// \~english @see
+////////////////////////////////////////////////////////////////////////////////////
+ BOOL DoesProcessExist(void);
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup DisableAutoKill
+/// \~english @par Summary
+/// -none
+/// \~english @param None
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - set m_fAutoKill as FALSE
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will disable the Auto Kill function in the destructor,\n
+/// thus letting the process whom this object represents continue running.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void DisableAutoKill(void) {
+ m_fAutoKill = FALSE;
+ }
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// \ingroup EnableAutoKill
+/// \~english @par Summary
+/// - Enable the Auto Kill
+/// \~english @param None
+/// \~english @retval None
+/// \~english @par Preconditions
+/// -no preconditions
+/// \~english @par Change of the internal state
+/// - set m_fAutoKill as TRUE
+/// \~english @par Causes of failures
+/// - None
+/// \~english @par Classification
+/// - Public
+/// \~english @par Type
+/// - sync only
+/// \~english @par Detail
+/// - This method will Enable the Auto Kill function in the destructor,\n
+/// thus killing the process whom this object represents.
+/// \~english @see None
+////////////////////////////////////////////////////////////////////////////////////
+ void EnableAutoKill(void) {
+ m_fAutoKill = TRUE;
+ }
+
+ private:
+ // Class Data Members
+ //---------------------------------------------
+
+ long m_lValidationTag; // Used to check if this is a valid // NOLINT (runtime/int)
+ // object or not.
+
+ int m_cpu_assign;
+ pid_t m_tProcessId; // This is the process ID for this process. All command, control,
+ // and status gathering will use this ID.
+ eProcessLoadMode m_eProcessLoadMode; // This is the process load mode provided by the caller when this
+ // process was created.
+ SS_String m_strFile; // This is the executable path and file name of this process
+ StringList m_strlstArgv; // This is the calling parameter Argv list provided by the caller.
+ SS_String m_strProcessName; // This is the name that was registered to the OS for process identification
+
+ int m_iErrorCode; // This was the returned PosixBasedOS001 error code for the last call. The programmer
+ // can look at this error code if an error was detected and an
+ // exception was thrown.
+ BOOL m_fAutoKill; // Used to indicate to destructor to kill the process whom this object
+ // represents on exit.
+ int m_iReturnCode;
+
+ //////////////////////////////////////////////////////////////////////
+ /// Copy
+ ///
+ /// Copies data members from the specified object to this object.
+ /// No attempt is made to free dynamically allocated objects within
+ /// this object (you must do that before calling this function).
+ ///
+ ///////////////////////////////////////////////////////////////////////
+ void Copy(const Process& p_rhs_i);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// ConvertToPosixBasedOS001SchedularPolicy
+ /// This method will return to the caller the equivalent PosixBasedOS001 schedular policy for the process
+ /// that this object represents
+ ///
+ ///
+ /// Calling Arguments:
+ /// Scheduling Policy
+ ///
+ /// \return policy
+ /// FIFO, A fixed priority scheduler in which the highest ready process runs until it
+ /// blocks or is preempted by a higher priority process.
+ /// ROUND_ROBIN, The same as FIFO, except processes at the same priority level time-slice.
+ /// OTHER A general time sharing scheduler in which a process decays in priority if it
+ /// consumes too much processor before blocking. It reverts to its default priority
+ /// when it blocks. Should it fail to run over a 2 second period and it has decayed
+ /// then it's boosted one priority level up to a maximum of its default priority.
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////
+ int const ConvertToPosixBasedOS001SchedularPolicy(
+ const eProcessSchedulingPolicy p_eSchedulingPolicy_i);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// ConvertFromPosixBasedOS001SchedularPolicy
+ ///
+ /// This method will return to the caller the eProcessSchedulingPolicy based on the PosixBasedOS001 schedular
+ /// policy for the process that this object represents
+ ///
+ ///
+ /// Calling Arguments:
+ /// PosixBasedOS001 Scheduling Policy
+ ///
+ /// \return policy
+ /// FIFO, A fixed priority scheduler in which the highest ready process runs until it
+ /// blocks or is preempted by a higher priority process.
+ /// ROUND_ROBIN, The same as FIFO, except processes at the same priority level time-slice.
+ /// OTHER A general time sharing scheduler in which a process decays in priority if it
+ /// consumes too much processor before blocking. It reverts to its default priority
+ /// when it blocks. Should it fail to run over a 2 second period and it has decayed
+ /// then it's boosted one priority level up to a maximum of its default priority.
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////
+ eProcessSchedulingPolicy const ConvertFromPosixBasedOS001SchedularPolicy(
+ const int p_iPosixBasedOS001chedulingPolicy_i);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SS_SystemServicesIf
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// \brief Check environment variable MOCK_LIBRARY where Mock Library Name to set in LD_PRELOAD is set
+ /// and output character string to set in LD_PRELOAD if there is setting.
+ /// \return
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ void CheckLdPreLoad(SS_String *process_path, char *environment_string);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// \ingroup SS_SystemServicesIf
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// \brief Acquire the character string of the environment variable and set it in String Vector
+ /// and return in a pointer of Vector.
+ /// \return vector<SS_String> pointer
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ std::vector<SS_String> *GetEnvironVector(void);
+// ----------------------------------------
+// ---------------- End -------------------
+};
+#endif // NOLINT (build/header_guard)
+
+/** @}*/
+/** @}*/
+/** @}*/