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 #pragma once | 10 #pragma once |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 #if defined(OS_POSIX) | 199 #if defined(OS_POSIX) |
200 // Returns the ID for the parent of the given process. | 200 // Returns the ID for the parent of the given process. |
201 BASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process); | 201 BASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process); |
202 | 202 |
203 // Close all file descriptors, except those which are a destination in the | 203 // Close all file descriptors, except those which are a destination in the |
204 // given multimap. Only call this function in a child process where you know | 204 // given multimap. Only call this function in a child process where you know |
205 // that there aren't any other threads. | 205 // that there aren't any other threads. |
206 BASE_EXPORT void CloseSuperfluousFds(const InjectiveMultimap& saved_map); | 206 BASE_EXPORT void CloseSuperfluousFds(const InjectiveMultimap& saved_map); |
207 #endif // defined(OS_POSIX) | 207 #endif // defined(OS_POSIX) |
208 | 208 |
209 // TODO(evan): rename these to use StudlyCaps. | 209 typedef std::vector<std::pair<std::string, std::string> > EnvironmentVector; |
210 typedef std::vector<std::pair<std::string, std::string> > environment_vector; | 210 typedef std::vector<std::pair<int, int> > FileHandleMappingVector; |
211 typedef std::vector<std::pair<int, int> > file_handle_mapping_vector; | |
212 | 211 |
213 #if defined(OS_MACOSX) | 212 #if defined(OS_MACOSX) |
214 // Used with LaunchOptions::synchronize and LaunchSynchronize, a | 213 // Used with LaunchOptions::synchronize and LaunchSynchronize, a |
215 // LaunchSynchronizationHandle is an opaque value that LaunchProcess will | 214 // LaunchSynchronizationHandle is an opaque value that LaunchProcess will |
216 // create and set, and that LaunchSynchronize will consume and destroy. | 215 // create and set, and that LaunchSynchronize will consume and destroy. |
217 typedef int* LaunchSynchronizationHandle; | 216 typedef int* LaunchSynchronizationHandle; |
218 #endif // defined(OS_MACOSX) | 217 #endif // defined(OS_MACOSX) |
219 | 218 |
220 // Options for launching a subprocess that are passed to LaunchProcess(). | 219 // Options for launching a subprocess that are passed to LaunchProcess(). |
221 // The default constructor constructs the object with default options. | 220 // The default constructor constructs the object with default options. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 // If true, use an empty string for the desktop name. | 259 // If true, use an empty string for the desktop name. |
261 bool empty_desktop_name; | 260 bool empty_desktop_name; |
262 | 261 |
263 // If non-NULL, launches the application in that job object. | 262 // If non-NULL, launches the application in that job object. |
264 HANDLE job_handle; | 263 HANDLE job_handle; |
265 #else | 264 #else |
266 // If non-NULL, set/unset environment variables. | 265 // If non-NULL, set/unset environment variables. |
267 // See documentation of AlterEnvironment(). | 266 // See documentation of AlterEnvironment(). |
268 // This pointer is owned by the caller and must live through the | 267 // This pointer is owned by the caller and must live through the |
269 // call to LaunchProcess(). | 268 // call to LaunchProcess(). |
270 const environment_vector* environ; | 269 const EnvironmentVector* environ; |
271 | 270 |
272 // If non-NULL, remap file descriptors according to the mapping of | 271 // If non-NULL, remap file descriptors according to the mapping of |
273 // src fd->dest fd to propagate FDs into the child process. | 272 // src fd->dest fd to propagate FDs into the child process. |
274 // This pointer is owned by the caller and must live through the | 273 // This pointer is owned by the caller and must live through the |
275 // call to LaunchProcess(). | 274 // call to LaunchProcess(). |
276 const file_handle_mapping_vector* fds_to_remap; | 275 const FileHandleMappingVector* fds_to_remap; |
277 | 276 |
278 // Each element is an RLIMIT_* constant that should be raised to its | 277 // Each element is an RLIMIT_* constant that should be raised to its |
279 // rlim_max. This pointer is owned by the caller and must live through | 278 // rlim_max. This pointer is owned by the caller and must live through |
280 // the call to LaunchProcess(). | 279 // the call to LaunchProcess(). |
281 const std::set<int>* maximize_rlimits; | 280 const std::set<int>* maximize_rlimits; |
282 | 281 |
283 // If true, start the process in a new process group, instead of | 282 // If true, start the process in a new process group, instead of |
284 // inheriting the parent's process group. The pgid of the child process | 283 // inheriting the parent's process group. The pgid of the child process |
285 // will be the same as its pid. | 284 // will be the same as its pid. |
286 bool new_process_group; | 285 bool new_process_group; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 enum IntegrityLevel { | 344 enum IntegrityLevel { |
346 INTEGRITY_UNKNOWN, | 345 INTEGRITY_UNKNOWN, |
347 LOW_INTEGRITY, | 346 LOW_INTEGRITY, |
348 MEDIUM_INTEGRITY, | 347 MEDIUM_INTEGRITY, |
349 HIGH_INTEGRITY, | 348 HIGH_INTEGRITY, |
350 }; | 349 }; |
351 // Determine the integrity level of the specified process. Returns false | 350 // Determine the integrity level of the specified process. Returns false |
352 // if the system does not support integrity levels (pre-Vista) or in the case | 351 // if the system does not support integrity levels (pre-Vista) or in the case |
353 // of an underlying system failure. | 352 // of an underlying system failure. |
354 BASE_EXPORT bool GetProcessIntegrityLevel(ProcessHandle process, | 353 BASE_EXPORT bool GetProcessIntegrityLevel(ProcessHandle process, |
355 IntegrityLevel *level); | 354 IntegrityLevel* level); |
356 | 355 |
357 // Windows-specific LaunchProcess that takes the command line as a | 356 // Windows-specific LaunchProcess that takes the command line as a |
358 // string. Useful for situations where you need to control the | 357 // string. Useful for situations where you need to control the |
359 // command line arguments directly, but prefer the CommandLine version | 358 // command line arguments directly, but prefer the CommandLine version |
360 // if launching Chrome itself. | 359 // if launching Chrome itself. |
361 // | 360 // |
362 // The first command line argument should be the path to the process, | 361 // The first command line argument should be the path to the process, |
363 // and don't forget to quote it. | 362 // and don't forget to quote it. |
364 // | 363 // |
365 // Example (including literal quotes) | 364 // Example (including literal quotes) |
(...skipping 11 matching lines...) Expand all Loading... |
377 const LaunchOptions& options, | 376 const LaunchOptions& options, |
378 ProcessHandle* process_handle); | 377 ProcessHandle* process_handle); |
379 | 378 |
380 // AlterEnvironment returns a modified environment vector, constructed from the | 379 // AlterEnvironment returns a modified environment vector, constructed from the |
381 // given environment and the list of changes given in |changes|. Each key in | 380 // given environment and the list of changes given in |changes|. Each key in |
382 // the environment is matched against the first element of the pairs. In the | 381 // the environment is matched against the first element of the pairs. In the |
383 // event of a match, the value is replaced by the second of the pair, unless | 382 // event of a match, the value is replaced by the second of the pair, unless |
384 // the second is empty, in which case the key-value is removed. | 383 // the second is empty, in which case the key-value is removed. |
385 // | 384 // |
386 // The returned array is allocated using new[] and must be freed by the caller. | 385 // The returned array is allocated using new[] and must be freed by the caller. |
387 BASE_EXPORT char** AlterEnvironment(const environment_vector& changes, | 386 BASE_EXPORT char** AlterEnvironment(const EnvironmentVector& changes, |
388 const char* const* const env); | 387 const char* const* const env); |
389 | 388 |
390 #if defined(OS_MACOSX) | 389 #if defined(OS_MACOSX) |
391 | 390 |
392 // After a successful call to LaunchProcess with LaunchOptions::synchronize | 391 // After a successful call to LaunchProcess with LaunchOptions::synchronize |
393 // set, the parent process must call LaunchSynchronize to allow the child | 392 // set, the parent process must call LaunchSynchronize to allow the child |
394 // process to proceed, and to destroy the LaunchSynchronizationHandle. | 393 // process to proceed, and to destroy the LaunchSynchronizationHandle. |
395 BASE_EXPORT void LaunchSynchronize(LaunchSynchronizationHandle handle); | 394 BASE_EXPORT void LaunchSynchronize(LaunchSynchronizationHandle handle); |
396 | 395 |
397 #endif // defined(OS_MACOSX) | 396 #endif // defined(OS_MACOSX) |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 // use with Process32First/Process32Next. | 578 // use with Process32First/Process32Next. |
580 void InitProcessEntry(ProcessEntry* entry); | 579 void InitProcessEntry(ProcessEntry* entry); |
581 | 580 |
582 #if defined(OS_WIN) | 581 #if defined(OS_WIN) |
583 HANDLE snapshot_; | 582 HANDLE snapshot_; |
584 bool started_iteration_; | 583 bool started_iteration_; |
585 #elif defined(OS_MACOSX) || defined(OS_BSD) | 584 #elif defined(OS_MACOSX) || defined(OS_BSD) |
586 std::vector<kinfo_proc> kinfo_procs_; | 585 std::vector<kinfo_proc> kinfo_procs_; |
587 size_t index_of_kinfo_proc_; | 586 size_t index_of_kinfo_proc_; |
588 #elif defined(OS_POSIX) | 587 #elif defined(OS_POSIX) |
589 DIR *procfs_dir_; | 588 DIR* procfs_dir_; |
590 #endif | 589 #endif |
591 ProcessEntry entry_; | 590 ProcessEntry entry_; |
592 const ProcessFilter* filter_; | 591 const ProcessFilter* filter_; |
593 | 592 |
594 DISALLOW_COPY_AND_ASSIGN(ProcessIterator); | 593 DISALLOW_COPY_AND_ASSIGN(ProcessIterator); |
595 }; | 594 }; |
596 | 595 |
597 // This class provides a way to iterate through the list of processes | 596 // This class provides a way to iterate through the list of processes |
598 // on the current machine that were started from the given executable | 597 // on the current machine that were started from the given executable |
599 // name. To use, create an instance and then call NextProcessEntry() | 598 // name. To use, create an instance and then call NextProcessEntry() |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 // instance running inside the parent. The parent's Breakpad instance should | 827 // instance running inside the parent. The parent's Breakpad instance should |
829 // not handle the child's exceptions. Calling RestoreDefaultExceptionHandler | 828 // not handle the child's exceptions. Calling RestoreDefaultExceptionHandler |
830 // in the child after forking will restore the standard exception handler. | 829 // in the child after forking will restore the standard exception handler. |
831 // See http://crbug.com/20371/ for more details. | 830 // See http://crbug.com/20371/ for more details. |
832 void RestoreDefaultExceptionHandler(); | 831 void RestoreDefaultExceptionHandler(); |
833 #endif // defined(OS_MACOSX) | 832 #endif // defined(OS_MACOSX) |
834 | 833 |
835 } // namespace base | 834 } // namespace base |
836 | 835 |
837 #endif // BASE_PROCESS_UTIL_H_ | 836 #endif // BASE_PROCESS_UTIL_H_ |
OLD | NEW |