Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: base/process/launch.h

Issue 1446363003: Deleted OS_WIN and all Windows specific files from base. (Closed) Base URL: https://github.com/domokit/mojo.git@base_tests
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/process/kill_win.cc ('k') | base/process/launch.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains functions for launching subprocesses. 5 // This file contains functions for launching subprocesses.
6 6
7 #ifndef BASE_PROCESS_LAUNCH_H_ 7 #ifndef BASE_PROCESS_LAUNCH_H_
8 #define BASE_PROCESS_LAUNCH_H_ 8 #define BASE_PROCESS_LAUNCH_H_
9 9
10 #include <string> 10 #include <string>
11 #include <utility> 11 #include <utility>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/base_export.h" 14 #include "base/base_export.h"
15 #include "base/basictypes.h" 15 #include "base/basictypes.h"
16 #include "base/environment.h" 16 #include "base/environment.h"
17 #include "base/process/process.h" 17 #include "base/process/process.h"
18 #include "base/process/process_handle.h" 18 #include "base/process/process_handle.h"
19 #include "base/strings/string_piece.h" 19 #include "base/strings/string_piece.h"
20 20
21 #if defined(OS_POSIX) 21 #if defined(OS_POSIX)
22 #include "base/posix/file_descriptor_shuffle.h" 22 #include "base/posix/file_descriptor_shuffle.h"
23 #elif defined(OS_WIN)
24 #include <windows.h>
25 #endif 23 #endif
26 24
27 namespace base { 25 namespace base {
28 26
29 class CommandLine; 27 class CommandLine;
30 28
31 #if defined(OS_WIN)
32 typedef std::vector<HANDLE> HandlesToInheritVector;
33 #endif
34 // TODO(viettrungluu): Only define this on POSIX? 29 // TODO(viettrungluu): Only define this on POSIX?
35 typedef std::vector<std::pair<int, int> > FileHandleMappingVector; 30 typedef std::vector<std::pair<int, int> > FileHandleMappingVector;
36 31
37 // Options for launching a subprocess that are passed to LaunchProcess(). 32 // Options for launching a subprocess that are passed to LaunchProcess().
38 // The default constructor constructs the object with default options. 33 // The default constructor constructs the object with default options.
39 struct BASE_EXPORT LaunchOptions { 34 struct BASE_EXPORT LaunchOptions {
40 #if defined(OS_POSIX) 35 #if defined(OS_POSIX)
41 // Delegate to be run in between fork and exec in the subprocess (see 36 // Delegate to be run in between fork and exec in the subprocess (see
42 // pre_exec_delegate below) 37 // pre_exec_delegate below)
43 class BASE_EXPORT PreExecDelegate { 38 class BASE_EXPORT PreExecDelegate {
(...skipping 10 matching lines...) Expand all
54 DISALLOW_COPY_AND_ASSIGN(PreExecDelegate); 49 DISALLOW_COPY_AND_ASSIGN(PreExecDelegate);
55 }; 50 };
56 #endif // defined(OS_POSIX) 51 #endif // defined(OS_POSIX)
57 52
58 LaunchOptions(); 53 LaunchOptions();
59 ~LaunchOptions(); 54 ~LaunchOptions();
60 55
61 // If true, wait for the process to complete. 56 // If true, wait for the process to complete.
62 bool wait; 57 bool wait;
63 58
64 #if defined(OS_WIN)
65 bool start_hidden;
66
67 // If non-null, inherit exactly the list of handles in this vector (these
68 // handles must be inheritable). This is only supported on Vista and higher.
69 HandlesToInheritVector* handles_to_inherit;
70
71 // If true, the new process inherits handles from the parent. In production
72 // code this flag should be used only when running short-lived, trusted
73 // binaries, because open handles from other libraries and subsystems will
74 // leak to the child process, causing errors such as open socket hangs.
75 // Note: If |handles_to_inherit| is non-null, this flag is ignored and only
76 // those handles will be inherited (on Vista and higher).
77 bool inherit_handles;
78
79 // If non-null, runs as if the user represented by the token had launched it.
80 // Whether the application is visible on the interactive desktop depends on
81 // the token belonging to an interactive logon session.
82 //
83 // To avoid hard to diagnose problems, when specified this loads the
84 // environment variables associated with the user and if this operation fails
85 // the entire call fails as well.
86 UserTokenHandle as_user;
87
88 // If true, use an empty string for the desktop name.
89 bool empty_desktop_name;
90
91 // If non-null, launches the application in that job object. The process will
92 // be terminated immediately and LaunchProcess() will fail if assignment to
93 // the job object fails.
94 HANDLE job_handle;
95
96 // Handles for the redirection of stdin, stdout and stderr. The handles must
97 // be inheritable. Caller should either set all three of them or none (i.e.
98 // there is no way to redirect stderr without redirecting stdin). The
99 // |inherit_handles| flag must be set to true when redirecting stdio stream.
100 HANDLE stdin_handle;
101 HANDLE stdout_handle;
102 HANDLE stderr_handle;
103
104 // If set to true, ensures that the child process is launched with the
105 // CREATE_BREAKAWAY_FROM_JOB flag which allows it to breakout of the parent
106 // job if any.
107 bool force_breakaway_from_job_;
108 #else
109 // Set/unset environment variables. These are applied on top of the parent 59 // Set/unset environment variables. These are applied on top of the parent
110 // process environment. Empty (the default) means to inherit the same 60 // process environment. Empty (the default) means to inherit the same
111 // environment. See AlterEnvironment(). 61 // environment. See AlterEnvironment().
112 EnvironmentMap environ; 62 EnvironmentMap environ;
113 63
114 // Clear the environment for the new process before processing changes from 64 // Clear the environment for the new process before processing changes from
115 // |environ|. 65 // |environ|.
116 bool clear_environ; 66 bool clear_environ;
117 67
118 // If non-null, remap file descriptors according to the mapping of 68 // If non-null, remap file descriptors according to the mapping of
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 117
168 #if defined(OS_MACOSX) 118 #if defined(OS_MACOSX)
169 // If this name is non-empty, the new child, after fork() but before exec(), 119 // If this name is non-empty, the new child, after fork() but before exec(),
170 // will look up this server name in the bootstrap namespace. The resulting 120 // will look up this server name in the bootstrap namespace. The resulting
171 // service port will be replaced as the bootstrap port in the child. Because 121 // service port will be replaced as the bootstrap port in the child. Because
172 // the process's IPC space is cleared on exec(), any rights to the old 122 // the process's IPC space is cleared on exec(), any rights to the old
173 // bootstrap port will not be transferred to the new process. 123 // bootstrap port will not be transferred to the new process.
174 std::string replacement_bootstrap_name; 124 std::string replacement_bootstrap_name;
175 #endif 125 #endif
176 126
177 #endif // !defined(OS_WIN)
178 }; 127 };
179 128
180 // Launch a process via the command line |cmdline|. 129 // Launch a process via the command line |cmdline|.
181 // See the documentation of LaunchOptions for details on |options|. 130 // See the documentation of LaunchOptions for details on |options|.
182 // 131 //
183 // Returns a valid Process upon success. 132 // Returns a valid Process upon success.
184 // 133 //
185 // Unix-specific notes: 134 // Unix-specific notes:
186 // - All file descriptors open in the parent process will be closed in the 135 // - All file descriptors open in the parent process will be closed in the
187 // child process except for any preserved by options::fds_to_remap, and 136 // child process except for any preserved by options::fds_to_remap, and
188 // stdin, stdout, and stderr. If not remapped by options::fds_to_remap, 137 // stdin, stdout, and stderr. If not remapped by options::fds_to_remap,
189 // stdin is reopened as /dev/null, and the child is allowed to inherit its 138 // stdin is reopened as /dev/null, and the child is allowed to inherit its
190 // parent's stdout and stderr. 139 // parent's stdout and stderr.
191 // - If the first argument on the command line does not contain a slash, 140 // - If the first argument on the command line does not contain a slash,
192 // PATH will be searched. (See man execvp.) 141 // PATH will be searched. (See man execvp.)
193 BASE_EXPORT Process LaunchProcess(const CommandLine& cmdline, 142 BASE_EXPORT Process LaunchProcess(const CommandLine& cmdline,
194 const LaunchOptions& options); 143 const LaunchOptions& options);
195 144
196 #if defined(OS_WIN) 145 #if defined(OS_POSIX)
197 // Windows-specific LaunchProcess that takes the command line as a
198 // string. Useful for situations where you need to control the
199 // command line arguments directly, but prefer the CommandLine version
200 // if launching Chrome itself.
201 //
202 // The first command line argument should be the path to the process,
203 // and don't forget to quote it.
204 //
205 // Example (including literal quotes)
206 // cmdline = "c:\windows\explorer.exe" -foo "c:\bar\"
207 BASE_EXPORT Process LaunchProcess(const string16& cmdline,
208 const LaunchOptions& options);
209
210 // Launches a process with elevated privileges. This does not behave exactly
211 // like LaunchProcess as it uses ShellExecuteEx instead of CreateProcess to
212 // create the process. This means the process will have elevated privileges
213 // and thus some common operations like OpenProcess will fail. Currently the
214 // only supported LaunchOptions are |start_hidden| and |wait|.
215 BASE_EXPORT Process LaunchElevatedProcess(const CommandLine& cmdline,
216 const LaunchOptions& options);
217
218 #elif defined(OS_POSIX)
219 // A POSIX-specific version of LaunchProcess that takes an argv array 146 // A POSIX-specific version of LaunchProcess that takes an argv array
220 // instead of a CommandLine. Useful for situations where you need to 147 // instead of a CommandLine. Useful for situations where you need to
221 // control the command line arguments directly, but prefer the 148 // control the command line arguments directly, but prefer the
222 // CommandLine version if launching Chrome itself. 149 // CommandLine version if launching Chrome itself.
223 BASE_EXPORT Process LaunchProcess(const std::vector<std::string>& argv, 150 BASE_EXPORT Process LaunchProcess(const std::vector<std::string>& argv,
224 const LaunchOptions& options); 151 const LaunchOptions& options);
225 152
226 // Close all file descriptors, except those which are a destination in the 153 // Close all file descriptors, except those which are a destination in the
227 // given multimap. Only call this function in a child process where you know 154 // given multimap. Only call this function in a child process where you know
228 // that there aren't any other threads. 155 // that there aren't any other threads.
229 BASE_EXPORT void CloseSuperfluousFds(const InjectiveMultimap& saved_map); 156 BASE_EXPORT void CloseSuperfluousFds(const InjectiveMultimap& saved_map);
230 #endif // defined(OS_POSIX) 157 #endif // defined(OS_POSIX)
231 158
232 #if defined(OS_WIN)
233 // Set |job_object|'s JOBOBJECT_EXTENDED_LIMIT_INFORMATION
234 // BasicLimitInformation.LimitFlags to |limit_flags|.
235 BASE_EXPORT bool SetJobObjectLimitFlags(HANDLE job_object, DWORD limit_flags);
236
237 // Output multi-process printf, cout, cerr, etc to the cmd.exe console that ran
238 // chrome. This is not thread-safe: only call from main thread.
239 BASE_EXPORT void RouteStdioToConsole();
240 #endif // defined(OS_WIN)
241
242 // Executes the application specified by |cl| and wait for it to exit. Stores 159 // Executes the application specified by |cl| and wait for it to exit. Stores
243 // the output (stdout) in |output|. Redirects stderr to /dev/null. Returns true 160 // the output (stdout) in |output|. Redirects stderr to /dev/null. Returns true
244 // on success (application launched and exited cleanly, with exit code 161 // on success (application launched and exited cleanly, with exit code
245 // indicating success). 162 // indicating success).
246 BASE_EXPORT bool GetAppOutput(const CommandLine& cl, std::string* output); 163 BASE_EXPORT bool GetAppOutput(const CommandLine& cl, std::string* output);
247 164
248 #if defined(OS_WIN)
249 // A Windows-specific version of GetAppOutput that takes a command line string
250 // instead of a CommandLine object. Useful for situations where you need to
251 // control the command line arguments directly.
252 BASE_EXPORT bool GetAppOutput(const StringPiece16& cl, std::string* output);
253 #endif
254
255 #if defined(OS_POSIX) 165 #if defined(OS_POSIX)
256 // A POSIX-specific version of GetAppOutput that takes an argv array 166 // A POSIX-specific version of GetAppOutput that takes an argv array
257 // instead of a CommandLine. Useful for situations where you need to 167 // instead of a CommandLine. Useful for situations where you need to
258 // control the command line arguments directly. 168 // control the command line arguments directly.
259 BASE_EXPORT bool GetAppOutput(const std::vector<std::string>& argv, 169 BASE_EXPORT bool GetAppOutput(const std::vector<std::string>& argv,
260 std::string* output); 170 std::string* output);
261 171
262 // A restricted version of |GetAppOutput()| which (a) clears the environment, 172 // A restricted version of |GetAppOutput()| which (a) clears the environment,
263 // and (b) stores at most |max_output| bytes; also, it doesn't search the path 173 // and (b) stores at most |max_output| bytes; also, it doesn't search the path
264 // for the command. 174 // for the command.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 // multiple threads are running, since at the time the fork happened, the 222 // multiple threads are running, since at the time the fork happened, the
313 // threads could have been in any state (potentially holding locks, etc.). 223 // threads could have been in any state (potentially holding locks, etc.).
314 // Callers should most likely call execve() in the child soon after calling 224 // Callers should most likely call execve() in the child soon after calling
315 // this. 225 // this.
316 BASE_EXPORT pid_t ForkWithFlags(unsigned long flags, pid_t* ptid, pid_t* ctid); 226 BASE_EXPORT pid_t ForkWithFlags(unsigned long flags, pid_t* ptid, pid_t* ctid);
317 #endif 227 #endif
318 228
319 } // namespace base 229 } // namespace base
320 230
321 #endif // BASE_PROCESS_LAUNCH_H_ 231 #endif // BASE_PROCESS_LAUNCH_H_
OLDNEW
« no previous file with comments | « base/process/kill_win.cc ('k') | base/process/launch.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698