1/* 2 * Copyright (c) 2006, 2007, 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23#ifndef _LIBPROC_H_ 24#define _LIBPROC_H_ 25 26#include <sys/cdefs.h> 27#include <sys/param.h> 28#include <sys/types.h> 29#include <sys/stat.h> 30#include <sys/mount.h> 31#include <sys/resource.h> 32#include <stdint.h> 33#include <stdbool.h> 34 35#include <sys/proc_info.h> 36 37#include <Availability.h> 38 39/* 40 * This header file contains private interfaces to obtain process information. 41 * These interfaces are subject to change in future releases. 42 */ 43 44/*! 45 @define PROC_LISTPIDSPATH_PATH_IS_VOLUME 46 @discussion This flag indicates that all processes that hold open 47 file references on the volume associated with the specified 48 path should be returned. 49 */ 50#define PROC_LISTPIDSPATH_PATH_IS_VOLUME 1 51 52 53/*! 54 @define PROC_LISTPIDSPATH_EXCLUDE_EVTONLY 55 @discussion This flag indicates that file references that were opened 56 with the O_EVTONLY flag should be excluded from the matching 57 criteria. 58 */ 59#define PROC_LISTPIDSPATH_EXCLUDE_EVTONLY 2 60 61__BEGIN_DECLS 62 63 64/*! 65 @function proc_listpidspath 66 @discussion A function which will search through the current 67 processes looking for open file references which match 68 a specified path or volume. 69 @param type types of processes to be searched (see proc_listpids) 70 @param typeinfo adjunct information for type 71 @param path file or volume path 72 @param pathflags flags to control which files should be considered 73 during the process search. 74 @param buffer a C array of int-sized values to be filled with 75 process identifiers that hold an open file reference 76 matching the specified path or volume. Pass NULL to 77 obtain the minimum buffer size needed to hold the 78 currently active processes. 79 @param buffersize the size (in bytes) of the provided buffer. 80 @result the number of bytes of data returned in the provided buffer; 81 -1 if an error was encountered; 82 */ 83int proc_listpidspath(uint32_t type, 84 uint32_t typeinfo, 85 const char *path, 86 uint32_t pathflags, 87 void *buffer, 88 int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 89 90int proc_listpids(uint32_t type, uint32_t typeinfo, void *buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 91int proc_listallpids(void * buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_1); 92int proc_listpgrppids(pid_t pgrpid, void * buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_1); 93int proc_listchildpids(pid_t ppid, void * buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_1); 94int proc_pidinfo(int pid, int flavor, uint64_t arg, void *buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 95int proc_pidfdinfo(int pid, int fd, int flavor, void * buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 96int proc_pidfileportinfo(int pid, uint32_t fileport, int flavor, void *buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); 97int proc_name(int pid, void * buffer, uint32_t buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 98int proc_regionfilename(int pid, uint64_t address, void * buffer, uint32_t buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 99int proc_kmsgbuf(void * buffer, uint32_t buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 100int proc_pidpath(int pid, void * buffer, uint32_t buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 101int proc_libversion(int *major, int * minor) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 102 103/* 104 * Return resource usage information for the given pid, which can be a live process or a zombie. 105 * 106 * Returns 0 on success; or -1 on failure, with errno set to indicate the specific error. 107 */ 108int proc_pid_rusage(int pid, int flavor, rusage_info_t *buffer) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0); 109 110/* 111 * A process can use the following api to set its own process control 112 * state on resoure starvation. The argument can have one of the PROC_SETPC_XX values 113 */ 114#define PROC_SETPC_NONE 0 115#define PROC_SETPC_THROTTLEMEM 1 116#define PROC_SETPC_SUSPEND 2 117#define PROC_SETPC_TERMINATE 3 118 119int proc_setpcontrol(const int control) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); 120int proc_setpcontrol(const int control); 121 122int proc_track_dirty(pid_t pid, uint32_t flags); 123int proc_set_dirty(pid_t pid, bool dirty); 124int proc_get_dirty(pid_t pid, uint32_t *flags); 125int proc_clear_dirty(pid_t pid, uint32_t flags); 126 127int proc_terminate(pid_t pid, int *sig); 128 129__END_DECLS 130 131#endif /*_LIBPROC_H_ */ 132