]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/sys/proc_info.h
xnu-2782.10.72.tar.gz
[apple/xnu.git] / bsd / sys / proc_info.h
index e22cd3ab49e5f45c13e3dffc70be589c47129cf1..e8ca29c4f11aeee50789cc6b967918f06041c3de 100644 (file)
@@ -41,6 +41,7 @@
 #include <net/route.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
+#include <mach/machine.h>
 
 __BEGIN_DECLS
 
@@ -50,6 +51,7 @@ __BEGIN_DECLS
 #define PROC_TTY_ONLY          3
 #define PROC_UID_ONLY          4
 #define PROC_RUID_ONLY         5
+#define PROC_PPID_ONLY         6
 
 struct proc_bsdinfo {
        uint32_t                pbi_flags;              /* 64bit; emulated etc */
@@ -77,25 +79,87 @@ struct proc_bsdinfo {
 };
 
 
+struct proc_bsdshortinfo {
+        uint32_t                pbsi_pid;              /* process id */
+        uint32_t                pbsi_ppid;             /* process parent id */
+        uint32_t                pbsi_pgid;             /* process perp id */
+       uint32_t                pbsi_status;            /* p_stat value, SZOMB, SRUN, etc */
+       char                    pbsi_comm[MAXCOMLEN];   /* upto 16 characters of process name */
+       uint32_t                pbsi_flags;              /* 64bit; emulated etc */
+        uid_t                   pbsi_uid;              /* current uid on process */
+        gid_t                   pbsi_gid;              /* current gid on process */
+        uid_t                   pbsi_ruid;             /* current ruid on process */
+        gid_t                   pbsi_rgid;             /* current tgid on process */
+        uid_t                   pbsi_svuid;            /* current svuid on process */
+        gid_t                   pbsi_svgid;            /* current svgid on process */
+        uint32_t                pbsi_rfu;              /* reserved for future use*/
+};
+
+
+#ifdef  PRIVATE
+struct proc_uniqidentifierinfo {
+       uint8_t                 p_uuid[16];             /* UUID of the main executable */
+       uint64_t                p_uniqueid;             /* 64 bit unique identifier for process */
+       uint64_t                p_puniqueid;            /* unique identifier for process's parent */
+       uint64_t                p_reserve2;             /* reserved for future use */
+       uint64_t                p_reserve3;             /* reserved for future use */
+       uint64_t                p_reserve4;             /* reserved for future use */
+};
+
+
+struct proc_bsdinfowithuniqid {
+       struct proc_bsdinfo             pbsd;
+       struct proc_uniqidentifierinfo  p_uniqidentifier;
+};
+
+struct proc_archinfo {
+       cpu_type_t              p_cputype;      
+       cpu_subtype_t           p_cpusubtype;
+};
+
+struct proc_pidcoalitioninfo {
+       uint64_t coalition_id;
+       uint64_t reserved1;
+       uint64_t reserved2;
+       uint64_t reserved3;
+};
+
+#endif
+
 
 /* pbi_flags values */
-#define PROC_FLAG_SYSTEM       1
-#define PROC_FLAG_TRACED       2
-#define PROC_FLAG_INEXIT       4
+#define PROC_FLAG_SYSTEM       1       /*  System process */
+#define PROC_FLAG_TRACED       2       /* process currently being traced, possibly by gdb */
+#define PROC_FLAG_INEXIT       4       /* process is working its way in exit() */
 #define PROC_FLAG_PPWAIT       8
-#define PROC_FLAG_LP64         0x10
-#define PROC_FLAG_SLEADER      0x20
-#define PROC_FLAG_CTTY         0x40
-#define PROC_FLAG_CONTROLT     0x80
-#define PROC_FLAG_THCWD                0x100
+#define PROC_FLAG_LP64         0x10    /* 64bit process */
+#define PROC_FLAG_SLEADER      0x20    /* The process is the session leader */
+#define PROC_FLAG_CTTY         0x40    /* process has a control tty */
+#define PROC_FLAG_CONTROLT     0x80    /* Has a controlling terminal */
+#define PROC_FLAG_THCWD                0x100   /* process has a thread with cwd */
 /* process control bits for resource starvation */
-#define PROC_FLAG_PC_THROTTLE  0x200
-#define PROC_FLAG_PC_SUSP      0x400
-#define PROC_FLAG_PC_KILL      0x600
+#define PROC_FLAG_PC_THROTTLE  0x200   /* In resource starvation situations, this process is to be throttled */
+#define PROC_FLAG_PC_SUSP      0x400   /* In resource starvation situations, this process is to be suspended */
+#define PROC_FLAG_PC_KILL      0x600   /* In resource starvation situations, this process is to be terminated */
 #define PROC_FLAG_PC_MASK      0x600
 /* process action bits for resource starvation */
-#define PROC_FLAG_PA_THROTTLE  0x800
-#define PROC_FLAG_PA_SUSP      0x1000
+#define PROC_FLAG_PA_THROTTLE  0x800   /* The process is currently throttled due to resource starvation */
+#define PROC_FLAG_PA_SUSP      0x1000  /* The process is currently suspended due to resource starvation */
+#define PROC_FLAG_PSUGID        0x2000  /* process has set privileges since last exec */
+#define PROC_FLAG_EXEC         0x4000   /* process has called exec  */
+#ifdef  PRIVATE
+#define PROC_FLAG_DARWINBG     0x8000  /* process in darwin background */
+#define PROC_FLAG_EXT_DARWINBG 0x10000 /* process in darwin background - external enforcement */
+#define PROC_FLAG_IOS_APPLEDAEMON 0x20000      /* Process is apple daemon  */
+#define PROC_FLAG_DELAYIDLESLEEP 0x40000       /* Process is marked to delay idle sleep on disk IO */
+#define PROC_FLAG_IOS_IMPPROMOTION 0x80000     /* Process is daemon which receives importane donation  */
+#define PROC_FLAG_ADAPTIVE              0x100000         /* Process is adaptive */
+#define PROC_FLAG_ADAPTIVE_IMPORTANT    0x200000         /* Process is adaptive, and is currently important */
+#define PROC_FLAG_IMPORTANCE_DONOR   0x400000 /* Process is marked as an importance donor */
+#define PROC_FLAG_SUPPRESSED         0x800000 /* Process is suppressed */
+#define PROC_FLAG_APPLICATION 0x1000000        /* Process is an application */
+#define PROC_FLAG_IOS_APPLICATION PROC_FLAG_APPLICATION        /* Process is an application */
+#endif
 
 
 struct proc_taskinfo {
@@ -174,6 +238,7 @@ struct proc_regioninfo {
 #define SM_TRUESHARED      5
 #define SM_PRIVATE_ALIASED 6
 #define SM_SHARED_ALIASED  7
+#define SM_LARGE_PAGE      8
 
 
 /*
@@ -199,20 +264,33 @@ struct proc_workqueueinfo {
        uint32_t        pwq_nthreads;           /* total number of workqueue threads */
        uint32_t        pwq_runthreads;         /* total number of running workqueue threads */
        uint32_t        pwq_blockedthreads;     /* total number of blocked workqueue threads */
-       uint32_t        reserved[1];            /* reserved for future use */
+       uint32_t        pwq_state;
 };
 
+/*
+ *     workqueue state (pwq_state field)
+ */
+#define WQ_EXCEEDED_CONSTRAINED_THREAD_LIMIT   0x1
+#define WQ_EXCEEDED_TOTAL_THREAD_LIMIT         0x2
+
+
 struct proc_fileinfo {
        uint32_t                fi_openflags;
        uint32_t                fi_status;      
        off_t                   fi_offset;
        int32_t                 fi_type;
-       int32_t                 rfu_1;  /* reserved */
+       uint32_t                fi_guardflags;
 };
 
 /* stats flags in proc_fileinfo */
 #define PROC_FP_SHARED 1       /* shared by more than one fd */
 #define PROC_FP_CLEXEC 2       /* close on exec */
+#define PROC_FP_GUARDED        4       /* guarded fd */
+
+#define PROC_FI_GUARD_CLOSE            (1u << 0)
+#define PROC_FI_GUARD_DUP              (1u << 1)
+#define PROC_FI_GUARD_SOCKET_IPC       (1u << 2)
+#define PROC_FI_GUARD_FILEPORT         (1u << 3)
 
 /*
  * A copy of stat64 with static sized fields.
@@ -561,6 +639,11 @@ struct proc_fdinfo {
        uint32_t                proc_fdtype;    
 };
 
+struct proc_fileportinfo {
+       uint32_t                proc_fileport;
+       uint32_t                proc_fdtype;
+};
+
 /* Flavors for proc_pidinfo() */
 #define PROC_PIDLISTFDS                        1
 #define PROC_PIDLISTFD_SIZE            (sizeof(struct proc_fdinfo))
@@ -600,6 +683,45 @@ struct proc_fdinfo {
 #define PROC_PIDWORKQUEUEINFO          12
 #define PROC_PIDWORKQUEUEINFO_SIZE     (sizeof(struct proc_workqueueinfo))
 
+#define PROC_PIDT_SHORTBSDINFO         13
+#define PROC_PIDT_SHORTBSDINFO_SIZE    (sizeof(struct proc_bsdshortinfo))
+
+#define PROC_PIDLISTFILEPORTS          14
+#define PROC_PIDLISTFILEPORTS_SIZE     (sizeof(struct proc_fileportinfo))
+
+#define PROC_PIDTHREADID64INFO         15
+#define PROC_PIDTHREADID64INFO_SIZE    (sizeof(struct proc_threadinfo))
+
+#define PROC_PID_RUSAGE                        16
+#define PROC_PID_RUSAGE_SIZE           0
+
+#ifdef  PRIVATE
+#define PROC_PIDUNIQIDENTIFIERINFO     17
+#define PROC_PIDUNIQIDENTIFIERINFO_SIZE \
+                                       (sizeof(struct proc_uniqidentifierinfo))
+
+#define PROC_PIDT_BSDINFOWITHUNIQID    18
+#define PROC_PIDT_BSDINFOWITHUNIQID_SIZE \
+                                       (sizeof(struct proc_bsdinfowithuniqid))
+
+#define PROC_PIDARCHINFO               19
+#define PROC_PIDARCHINFO_SIZE          \
+                                       (sizeof(struct proc_archinfo))
+
+#define PROC_PIDCOALITIONINFO          20
+#define PROC_PIDCOALITIONINFO_SIZE     (sizeof(struct proc_pidcoalitioninfo))
+
+#define PROC_PIDNOTEEXIT               21
+#define PROC_PIDNOTEEXIT_SIZE          (sizeof(uint32_t))
+
+#define PROC_PIDREGIONPATHINFO2                22
+#define PROC_PIDREGIONPATHINFO2_SIZE   (sizeof(struct proc_regionwithpathinfo))
+
+#define PROC_PIDREGIONPATHINFO3                23
+#define PROC_PIDREGIONPATHINFO3_SIZE   (sizeof(struct proc_regionwithpathinfo))
+
+#endif
+
 /* Flavors for proc_pidfdinfo */
 
 #define PROC_PIDFDVNODEINFO            1
@@ -626,9 +748,72 @@ struct proc_fdinfo {
 #define PROC_PIDFDATALKINFO            8
 #define PROC_PIDFDATALKINFO_SIZE       (sizeof(struct appletalk_fdinfo))
 
+/* Flavors for proc_pidfileportinfo */
+
+#define PROC_PIDFILEPORTVNODEPATHINFO  2       /* out: vnode_fdinfowithpath */
+#define PROC_PIDFILEPORTVNODEPATHINFO_SIZE     \
+                                       PROC_PIDFDVNODEPATHINFO_SIZE
+
+#define PROC_PIDFILEPORTSOCKETINFO     3       /* out: socket_fdinfo */
+#define PROC_PIDFILEPORTSOCKETINFO_SIZE        PROC_PIDFDSOCKETINFO_SIZE
+
+#define PROC_PIDFILEPORTPSHMINFO       5       /* out: pshm_fdinfo */
+#define PROC_PIDFILEPORTPSHMINFO_SIZE  PROC_PIDFDPSHMINFO_SIZE
+
+#define PROC_PIDFILEPORTPIPEINFO       6       /* out: pipe_fdinfo */
+#define PROC_PIDFILEPORTPIPEINFO_SIZE  PROC_PIDFDPIPEINFO_SIZE
+
 /* used for proc_setcontrol */
 #define PROC_SELFSET_PCONTROL          1
 
+#define PROC_SELFSET_THREADNAME                2
+#define PROC_SELFSET_THREADNAME_SIZE   (MAXTHREADNAMESIZE -1)
+
+#define PROC_SELFSET_VMRSRCOWNER       3
+
+#define PROC_SELFSET_DELAYIDLESLEEP    4
+
+/* used for proc_dirtycontrol */
+#define PROC_DIRTYCONTROL_TRACK         1
+#define PROC_DIRTYCONTROL_SET           2
+#define PROC_DIRTYCONTROL_GET           3
+#define PROC_DIRTYCONTROL_CLEAR         4
+
+/* proc_track_dirty() flags */
+#define PROC_DIRTY_TRACK                0x1
+#define PROC_DIRTY_ALLOW_IDLE_EXIT      0x2
+#define PROC_DIRTY_DEFER                0x4
+#define PROC_DIRTY_LAUNCH_IN_PROGRESS   0x8
+
+/* proc_get_dirty() flags */
+#define PROC_DIRTY_TRACKED              0x1
+#define PROC_DIRTY_ALLOWS_IDLE_EXIT     0x2
+#define PROC_DIRTY_IS_DIRTY             0x4
+#define PROC_DIRTY_LAUNCH_IS_IN_PROGRESS   0x8
+
+#ifdef PRIVATE
+
+/* Flavors for proc_pidoriginatorinfo */
+#define PROC_PIDORIGINATOR_UUID                0x1
+#define PROC_PIDORIGINATOR_UUID_SIZE   (sizeof(uuid_t))
+
+#define PROC_PIDORIGINATOR_BGSTATE     0x2
+#define PROC_PIDORIGINATOR_BGSTATE_SIZE (sizeof(uint32_t))
+
+/* __proc_info() call numbers */
+#define PROC_INFO_CALL_LISTPIDS         0x1
+#define PROC_INFO_CALL_PIDINFO          0x2
+#define PROC_INFO_CALL_PIDFDINFO        0x3
+#define PROC_INFO_CALL_KERNMSGBUF       0x4
+#define PROC_INFO_CALL_SETCONTROL       0x5
+#define PROC_INFO_CALL_PIDFILEPORTINFO  0x6
+#define PROC_INFO_CALL_TERMINATE        0x7
+#define PROC_INFO_CALL_DIRTYCONTROL     0x8
+#define PROC_INFO_CALL_PIDRUSAGE        0x9
+#define PROC_INFO_CALL_PIDORIGINATORINFO 0xa
+
+#endif /* PRIVATE */
+
 #ifdef XNU_KERNEL_PRIVATE
 #ifndef pshmnode
 struct pshmnode;