aboutsummaryrefslogtreecommitdiff
path: root/source/Host/posix/HostProcessPosix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Host/posix/HostProcessPosix.cpp')
-rw-r--r--source/Host/posix/HostProcessPosix.cpp47
1 files changed, 30 insertions, 17 deletions
diff --git a/source/Host/posix/HostProcessPosix.cpp b/source/Host/posix/HostProcessPosix.cpp
index 4618de4711de..8e19add048ee 100644
--- a/source/Host/posix/HostProcessPosix.cpp
+++ b/source/Host/posix/HostProcessPosix.cpp
@@ -1,4 +1,4 @@
-//===-- HostProcessWindows.cpp ----------------------------------*- C++ -*-===//
+//===-- HostProcessPosix.cpp ------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,6 +7,7 @@
//
//===----------------------------------------------------------------------===//
+#include "lldb/Host/Host.h"
#include "lldb/Host/posix/HostProcessPosix.h"
#include "lldb/Host/FileSystem.h"
@@ -16,49 +17,52 @@
using namespace lldb_private;
-const lldb::pid_t HostProcessPosix::kInvalidProcessId = 0;
+namespace
+{
+ const int kInvalidPosixProcess = 0;
+}
HostProcessPosix::HostProcessPosix()
-: m_pid(kInvalidProcessId)
+ : HostNativeProcessBase(kInvalidPosixProcess)
{
}
-HostProcessPosix::~HostProcessPosix()
+HostProcessPosix::HostProcessPosix(lldb::process_t process)
+ : HostNativeProcessBase(process)
{
}
-Error HostProcessPosix::Create(lldb::pid_t pid)
+HostProcessPosix::~HostProcessPosix()
{
- Error error;
- if (pid == kInvalidProcessId)
- error.SetErrorString("Attempt to create an invalid process");
-
- m_pid = pid;
- return error;
}
Error HostProcessPosix::Signal(int signo) const
{
- if (m_pid <= 0)
+ if (m_process == kInvalidPosixProcess)
{
Error error;
error.SetErrorString("HostProcessPosix refers to an invalid process");
return error;
}
- return HostProcessPosix::Signal(m_pid, signo);
+ return HostProcessPosix::Signal(m_process, signo);
}
-Error HostProcessPosix::Signal(lldb::pid_t pid, int signo)
+Error HostProcessPosix::Signal(lldb::process_t process, int signo)
{
Error error;
- if (-1 == ::kill(pid, signo))
+ if (-1 == ::kill(process, signo))
error.SetErrorToErrno();
return error;
}
+Error HostProcessPosix::Terminate()
+{
+ return Signal(SIGKILL);
+}
+
Error HostProcessPosix::GetMainModule(FileSpec &file_spec) const
{
Error error;
@@ -66,7 +70,7 @@ Error HostProcessPosix::GetMainModule(FileSpec &file_spec) const
// Use special code here because proc/[pid]/exe is a symbolic link.
char link_path[PATH_MAX];
char exe_path[PATH_MAX] = "";
- if (snprintf (link_path, PATH_MAX, "/proc/%" PRIu64 "/exe", m_pid) <= 0)
+ if (snprintf (link_path, PATH_MAX, "/proc/%" PRIu64 "/exe", m_process) <= 0)
{
error.SetErrorString("Unable to build /proc/<pid>/exe string");
return error;
@@ -92,12 +96,21 @@ Error HostProcessPosix::GetMainModule(FileSpec &file_spec) const
lldb::pid_t HostProcessPosix::GetProcessId() const
{
- return m_pid;
+ return m_process;
}
bool HostProcessPosix::IsRunning() const
{
+ if (m_process == kInvalidPosixProcess)
+ return false;
+
// Send this process the null signal. If it succeeds the process is running.
Error error = Signal(0);
return error.Success();
}
+
+HostThread
+HostProcessPosix::StartMonitoring(HostProcess::MonitorCallback callback, void *callback_baton, bool monitor_signals)
+{
+ return Host::StartMonitoringChildProcess(callback, callback_baton, m_process, monitor_signals);
+}