[lldb-dev] Host::LaunchProcess vs. ProcessPlugin::DoLaunch

Zachary Turner zturner at google.com
Tue Aug 12 16:20:27 PDT 2014

Makes sense.  I think the handle makes more sense in the
ProcessInstanceInfo than the ProcessInfo, since by definition a HANDLE
implies that you're referring to an instance of the process that is
currently running, which is what ProcessInstanceInfo is for.

Still though, I wonder if it might be better to have LaunchProcess take a
ProcessInstanceInfo* argument that could be filled out by the function.  I
agree that just putting the lldb::host::process_t directly into the
ProcessLaunchInfo alongside the pid would be easier, but I don't mind doing
the extra work for a more robust solution, if you agree that there's value
in doing it this way.

On Tue, Aug 12, 2014 at 4:09 PM, Greg Clayton <gclayton at apple.com> wrote:

> > On Aug 12, 2014, at 3:58 PM, Zachary Turner <zturner at google.com> wrote:
> >
> > Thanks, that makes sense.  The problem is that Host::LaunchProcess
> doesn't really return anything useful.  When I create a process on Windows,
> I get a HANDLE back that I can use to later manipulate the process.  Note
> that this isn't the same as a Pid.  I guess Host::LaunchProcess will return
> the pid in the launch_info structure,
> Indeed it does.
> > which I could then use to get another handle, but that would involve
> closing the first handle before I get the second handle, which I'm a little
> wary of, and I would feel better just using the original handle.  But
> there's no obvious way to pass it back.
> We can have the LaunchInfo contain the new "host" version of the process
> handle which would need to be added to the lldb-types.h. We had spoke about
> this before about possibly adding a:
> namespace lldb {
>   namespace host {
>     typedef pid_t process_t;
>   }
> }
> On windows you could make this a process handle and add
> lldb_private::ProcessInfo could have a new ivar added:
> namespace lldb_private
> {
>     class ProcessInfo
>     {
>         FileSpec m_executable;
>         std::string m_arg0; // argv[0] if supported. If empty, then use
> m_executable.
>         // Not all process plug-ins support specifying an argv[0]
>         // that differs from the resolved platform executable
>         // (which is in m_executable)
>         Args m_arguments;   // All program arguments except argv[0]
>         Args m_environment;
>         uint32_t m_uid;
>         uint32_t m_gid;
>         ArchSpec m_arch;
>         lldb::pid_t m_pid;
>         lldb::host::process_t m_process_handle; // <<<<< new ivar
>     };
> >
> > I'm not sure what the right abstraction is here that would make sense on
> all platforms, but I feel like what is needed is some kind of NativeProcess
> class, and LaunchProcess's signature could change to this:
> I believe the lldb::host::process_t should be enough. It can be a class if
> needed for your system, or it can just be a quick typedef like above.
> >
> > static Error
> > Host::LaunchProcess (ProcessLaunchInfo &launch_info, NativeProcess
> **process);
> >
> > If the user passes in NULL, then we just clean up the process handle (or
> do nothing, depending on platform), and if it's not NULL, then Host
> allocates the appropriate type of Platform specific Process object.  For
> example, it allocates a NativeProcessLinux, or a NativeProcessMacOSX, or a
> NativeProcessWindows, etc.
> >
> > Do you think something like this could work?  Or maybe have other ideas?
> I would update the ProcessInfo (ProcessInstanceInfo inherits from it)
> since this also ties into the platform functions that find and get info for
> processes:
>         virtual uint32_t
>         Platform::FindProcesses (const ProcessInstanceInfoMatch
> &match_info,
>                                  ProcessInstanceInfoList &proc_infos);
>         virtual bool
>         Platform::GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo
> &proc_info);
> And it would be nice to get these native process handles there as well.
> Greg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20140812/41e1aafe/attachment.html>

More information about the lldb-dev mailing list