text: // Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
  // 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/macros.h>
  #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_
  