| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/namespace contains utility functions for enumerating, ending and | 5 // This file/namespace contains utility functions for enumerating, ending and |
| 6 // computing statistics of processes. | 6 // computing statistics of processes. |
| 7 | 7 |
| 8 #ifndef BASE_PROCESS_UTIL_H_ | 8 #ifndef BASE_PROCESS_UTIL_H_ |
| 9 #define BASE_PROCESS_UTIL_H_ | 9 #define BASE_PROCESS_UTIL_H_ |
| 10 | 10 |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 | 225 |
| 226 // Close all file descriptors, except those which are a destination in the | 226 // 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 | 227 // given multimap. Only call this function in a child process where you know |
| 228 // that there aren't any other threads. | 228 // that there aren't any other threads. |
| 229 BASE_EXPORT void CloseSuperfluousFds(const InjectiveMultimap& saved_map); | 229 BASE_EXPORT void CloseSuperfluousFds(const InjectiveMultimap& saved_map); |
| 230 #endif // defined(OS_POSIX) | 230 #endif // defined(OS_POSIX) |
| 231 | 231 |
| 232 typedef std::vector<std::pair<std::string, std::string> > EnvironmentVector; | 232 typedef std::vector<std::pair<std::string, std::string> > EnvironmentVector; |
| 233 typedef std::vector<std::pair<int, int> > FileHandleMappingVector; | 233 typedef std::vector<std::pair<int, int> > FileHandleMappingVector; |
| 234 | 234 |
| 235 #if defined(OS_MACOSX) | |
| 236 // Used with LaunchOptions::synchronize and LaunchSynchronize, a | |
| 237 // LaunchSynchronizationHandle is an opaque value that LaunchProcess will | |
| 238 // create and set, and that LaunchSynchronize will consume and destroy. | |
| 239 typedef int* LaunchSynchronizationHandle; | |
| 240 #endif // defined(OS_MACOSX) | |
| 241 | |
| 242 // Options for launching a subprocess that are passed to LaunchProcess(). | 235 // Options for launching a subprocess that are passed to LaunchProcess(). |
| 243 // The default constructor constructs the object with default options. | 236 // The default constructor constructs the object with default options. |
| 244 struct LaunchOptions { | 237 struct LaunchOptions { |
| 245 LaunchOptions() | 238 LaunchOptions() |
| 246 : wait(false), | 239 : wait(false), |
| 247 debug(false), | 240 debug(false), |
| 248 #if defined(OS_WIN) | 241 #if defined(OS_WIN) |
| 249 start_hidden(false), | 242 start_hidden(false), |
| 250 inherit_handles(false), | 243 inherit_handles(false), |
| 251 as_user(NULL), | 244 as_user(NULL), |
| 252 empty_desktop_name(false), | 245 empty_desktop_name(false), |
| 253 job_handle(NULL), | 246 job_handle(NULL), |
| 254 stdin_handle(NULL), | 247 stdin_handle(NULL), |
| 255 stdout_handle(NULL), | 248 stdout_handle(NULL), |
| 256 stderr_handle(NULL), | 249 stderr_handle(NULL), |
| 257 force_breakaway_from_job_(false) | 250 force_breakaway_from_job_(false) |
| 258 #else | 251 #else |
| 259 environ(NULL), | 252 environ(NULL), |
| 260 fds_to_remap(NULL), | 253 fds_to_remap(NULL), |
| 261 maximize_rlimits(NULL), | 254 maximize_rlimits(NULL), |
| 262 new_process_group(false) | 255 new_process_group(false) |
| 263 #if defined(OS_LINUX) | 256 #if defined(OS_LINUX) |
| 264 , clone_flags(0) | 257 , clone_flags(0) |
| 265 #endif // OS_LINUX | 258 #endif // OS_LINUX |
| 266 #if defined(OS_CHROMEOS) | 259 #if defined(OS_CHROMEOS) |
| 267 , ctrl_terminal_fd(-1) | 260 , ctrl_terminal_fd(-1) |
| 268 #endif // OS_CHROMEOS | 261 #endif // OS_CHROMEOS |
| 269 #if defined(OS_MACOSX) | |
| 270 , synchronize(NULL) | |
| 271 #endif // defined(OS_MACOSX) | |
| 272 #endif // !defined(OS_WIN) | 262 #endif // !defined(OS_WIN) |
| 273 {} | 263 {} |
| 274 | 264 |
| 275 // If true, wait for the process to complete. | 265 // If true, wait for the process to complete. |
| 276 bool wait; | 266 bool wait; |
| 277 | 267 |
| 278 // If true, print more debugging info (OS-dependent). | 268 // If true, print more debugging info (OS-dependent). |
| 279 bool debug; | 269 bool debug; |
| 280 | 270 |
| 281 #if defined(OS_WIN) | 271 #if defined(OS_WIN) |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 // If non-zero, start the process using clone(), using flags as provided. | 333 // If non-zero, start the process using clone(), using flags as provided. |
| 344 int clone_flags; | 334 int clone_flags; |
| 345 #endif // defined(OS_LINUX) | 335 #endif // defined(OS_LINUX) |
| 346 | 336 |
| 347 #if defined(OS_CHROMEOS) | 337 #if defined(OS_CHROMEOS) |
| 348 // If non-negative, the specified file descriptor will be set as the launched | 338 // If non-negative, the specified file descriptor will be set as the launched |
| 349 // process' controlling terminal. | 339 // process' controlling terminal. |
| 350 int ctrl_terminal_fd; | 340 int ctrl_terminal_fd; |
| 351 #endif // defined(OS_CHROMEOS) | 341 #endif // defined(OS_CHROMEOS) |
| 352 | 342 |
| 353 #if defined(OS_MACOSX) | |
| 354 // When non-NULL, a new LaunchSynchronizationHandle will be created and | |
| 355 // stored in *synchronize whenever LaunchProcess returns true in the parent | |
| 356 // process. The child process will have been created (with fork) but will | |
| 357 // be waiting (before exec) for the parent to call LaunchSynchronize with | |
| 358 // this handle. Only when LaunchSynchronize is called will the child be | |
| 359 // permitted to continue execution and call exec. LaunchSynchronize | |
| 360 // destroys the handle created by LaunchProcess. | |
| 361 // | |
| 362 // When synchronize is non-NULL, the parent must call LaunchSynchronize | |
| 363 // whenever LaunchProcess returns true. No exceptions. | |
| 364 // | |
| 365 // Synchronization is useful when the parent process needs to guarantee that | |
| 366 // it can take some action (such as recording the newly-forked child's | |
| 367 // process ID) before the child does something (such as using its process ID | |
| 368 // to communicate with its parent). | |
| 369 // | |
| 370 // |synchronize| and |wait| must not both be set simultaneously. | |
| 371 LaunchSynchronizationHandle* synchronize; | |
| 372 #endif // defined(OS_MACOSX) | |
| 373 | |
| 374 #endif // !defined(OS_WIN) | 343 #endif // !defined(OS_WIN) |
| 375 }; | 344 }; |
| 376 | 345 |
| 377 // Launch a process via the command line |cmdline|. | 346 // Launch a process via the command line |cmdline|. |
| 378 // See the documentation of LaunchOptions for details on |options|. | 347 // See the documentation of LaunchOptions for details on |options|. |
| 379 // | 348 // |
| 380 // Returns true upon success. | 349 // Returns true upon success. |
| 381 // | 350 // |
| 382 // Upon success, if |process_handle| is non-NULL, it will be filled in with the | 351 // Upon success, if |process_handle| is non-NULL, it will be filled in with the |
| 383 // handle of the launched process. NOTE: In this case, the caller is | 352 // handle of the launched process. NOTE: In this case, the caller is |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 | 404 |
| 436 // AlterEnvironment returns a modified environment vector, constructed from the | 405 // AlterEnvironment returns a modified environment vector, constructed from the |
| 437 // given environment and the list of changes given in |changes|. Each key in | 406 // given environment and the list of changes given in |changes|. Each key in |
| 438 // the environment is matched against the first element of the pairs. In the | 407 // the environment is matched against the first element of the pairs. In the |
| 439 // event of a match, the value is replaced by the second of the pair, unless | 408 // event of a match, the value is replaced by the second of the pair, unless |
| 440 // the second is empty, in which case the key-value is removed. | 409 // the second is empty, in which case the key-value is removed. |
| 441 // | 410 // |
| 442 // The returned array is allocated using new[] and must be freed by the caller. | 411 // The returned array is allocated using new[] and must be freed by the caller. |
| 443 BASE_EXPORT char** AlterEnvironment(const EnvironmentVector& changes, | 412 BASE_EXPORT char** AlterEnvironment(const EnvironmentVector& changes, |
| 444 const char* const* const env); | 413 const char* const* const env); |
| 445 | |
| 446 #if defined(OS_MACOSX) | |
| 447 | |
| 448 // After a successful call to LaunchProcess with LaunchOptions::synchronize | |
| 449 // set, the parent process must call LaunchSynchronize to allow the child | |
| 450 // process to proceed, and to destroy the LaunchSynchronizationHandle. | |
| 451 BASE_EXPORT void LaunchSynchronize(LaunchSynchronizationHandle handle); | |
| 452 | |
| 453 #endif // defined(OS_MACOSX) | |
| 454 #endif // defined(OS_POSIX) | 414 #endif // defined(OS_POSIX) |
| 455 | 415 |
| 456 #if defined(OS_WIN) | 416 #if defined(OS_WIN) |
| 457 // Set JOBOBJECT_EXTENDED_LIMIT_INFORMATION to JobObject |job_object|. | 417 // Set JOBOBJECT_EXTENDED_LIMIT_INFORMATION to JobObject |job_object|. |
| 458 // As its limit_info.BasicLimitInformation.LimitFlags has | 418 // As its limit_info.BasicLimitInformation.LimitFlags has |
| 459 // JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE. | 419 // JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE. |
| 460 // When the provide JobObject |job_object| is closed, the binded process will | 420 // When the provide JobObject |job_object| is closed, the binded process will |
| 461 // be terminated. | 421 // be terminated. |
| 462 BASE_EXPORT bool SetJobObjectAsKillOnJobClose(HANDLE job_object); | 422 BASE_EXPORT bool SetJobObjectAsKillOnJobClose(HANDLE job_object); |
| 463 #endif // defined(OS_WIN) | 423 #endif // defined(OS_WIN) |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 // YOUR CODE IS LIKELY TO BE REVERTED. THANK YOU. | 873 // YOUR CODE IS LIKELY TO BE REVERTED. THANK YOU. |
| 914 // | 874 // |
| 915 // TODO(shess): Weird place to put it, but this is where the OOM | 875 // TODO(shess): Weird place to put it, but this is where the OOM |
| 916 // killer currently lives. | 876 // killer currently lives. |
| 917 BASE_EXPORT void* UncheckedMalloc(size_t size); | 877 BASE_EXPORT void* UncheckedMalloc(size_t size); |
| 918 #endif // defined(OS_MACOSX) | 878 #endif // defined(OS_MACOSX) |
| 919 | 879 |
| 920 } // namespace base | 880 } // namespace base |
| 921 | 881 |
| 922 #endif // BASE_PROCESS_UTIL_H_ | 882 #endif // BASE_PROCESS_UTIL_H_ |
| OLD | NEW |