| // Copyright 2012 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef LOGIN_MANAGER_CHILD_JOB_H_ | |
| #define LOGIN_MANAGER_CHILD_JOB_H_ | |
| #include <unistd.h> | |
| #include <string> | |
| #include <vector> | |
| #include <base/time/time.h> | |
| namespace login_manager { | |
| class SystemUtils; | |
| // An interface declaring the basic functionality of a job that can be managed | |
| // by SessionManagerService. | |
| class ChildJobInterface { | |
| public: | |
| // Potential exit codes for use in Subprocess::Run(). | |
| static const int kCantSetUid; | |
| static const int kCantSetGid; | |
| static const int kCantSetGroups; | |
| static const int kCantSetEnv; | |
| static const int kCantExec; | |
| virtual ~ChildJobInterface() {} | |
| // Creates a background process and starts the job running in it. Does any | |
| // necessary bookkeeping. | |
| // Returns true if the process was created, false otherwise. | |
| virtual bool RunInBackground() = 0; | |
| // Attempt to kill the current instance of this job by sending | |
| // signal to the _entire process group_, sending message (if set) to | |
| // the instance to tell it why it must die. | |
| virtual void KillEverything(int signal, const std::string& message) = 0; | |
| // Attempt to kill the current instance of this job by sending | |
| // signal, sending message (if set) to the instance to tell it | |
| // why it must die. | |
| virtual void Kill(int signal, const std::string& message) = 0; | |
| // Returns the name of the job. | |
| virtual const std::string GetName() const = 0; | |
| // Returns the pid of the current instance of this job. May be -1. | |
| virtual pid_t CurrentPid() const = 0; | |
| }; | |
| } // namespace login_manager | |
| #endif // LOGIN_MANAGER_CHILD_JOB_H_ |