2 /* Copyright Gerhard Rieger and contributors (see file CHANGES) */
3 /* Published under the GNU General Public License V.2, see file COPYING */
5 /* the subroutine procan makes a "PROCess ANalysis". It gathers information
6 about the process environment it is running in without modifying its state
10 #include "xiosysincludes.h"
18 #include <sys/resource.h>
23 int procan(FILE *outfile
) {
25 /*filan(0, outfile);*/
27 /* controlling terminal */
28 fprintf(outfile
, "process id = "F_pid
"\n", Getpid());
29 fprintf(outfile
, "process parent id = "F_pid
"\n", Getppid());
32 if ((fd
= Open("/dev/tty", O_NOCTTY
, 0)) < 0) {
33 fprintf(outfile
, "controlling terminal: -\n");
36 fprintf(outfile
, "controlling terminal: \"%s\"\n", Ttyname(fd
));
38 char procpath
[PATH_MAX
], devpath
[PATH_MAX
+1];
40 sprintf(procpath
, "/proc/"F_pid
"/fd/%d", Getpid(), 0 /*! fd*/);
41 if ((devlen
= Readlink(procpath
, devpath
, sizeof(devpath
))) < 0) {
44 devpath
[devlen
] = '\0';
45 fprintf(outfile
, "controlling terminal: \"%s\"\n", devpath
);
50 fprintf(outfile
, "process group id = "F_pid
"\n", Getpgrp());
52 fprintf(outfile
, "process session id = "F_pid
"\n", Getsid(0));
54 fprintf(outfile
, "process group id if fg process / stdin = "F_pid
"\n", Tcgetpgrp(0));
55 fprintf(outfile
, "process group id if fg process / stdout = "F_pid
"\n", Tcgetpgrp(1));
56 fprintf(outfile
, "process group id if fg process / stderr = "F_pid
"\n", Tcgetpgrp(2));
59 if ((fd
= Open("/dev/tty", O_RDWR
, 0600)) >= 0) {
60 fprintf(outfile
, "process has a controlling terminal\n");
63 fprintf(outfile
, "process does not have a controlling terminal\n");
67 /* process owner, groups */
68 fprintf(outfile
, "user id = "F_uid
"\n", Getuid());
69 fprintf(outfile
, "effective user id = "F_uid
"\n", Geteuid());
70 fprintf(outfile
, "group id = "F_gid
"\n", Getgid());
71 fprintf(outfile
, "effective group id = "F_gid
"\n", Getegid());
76 fprintf(outfile
, "\nRESOURCE LIMITS\n");
77 fprintf(outfile
, "resource current maximum\n");
78 if (getrlimit(RLIMIT_CPU
, &rlim
) < 0) {
79 Warn2("getrlimit(RLIMIT_CPU, %p): %s", &rlim
, strerror(errno
));
82 "cpu time (seconds) %24"F_rlim_max
"%24"F_rlim_max
"\n",
83 rlim
.rlim_cur
, rlim
.rlim_max
);
85 if (getrlimit(RLIMIT_FSIZE
, &rlim
) < 0) {
86 Warn2("getrlimit(RLIMIT_FSIZE, %p): %s", &rlim
, strerror(errno
));
89 "file size (blocks) %24"F_rlim_max
"%24"F_rlim_max
"\n",
90 rlim
.rlim_cur
, rlim
.rlim_max
);
92 if (getrlimit(RLIMIT_DATA
, &rlim
) < 0) {
93 Warn2("getrlimit(RLIMIT_DATA, %p): %s", &rlim
, strerror(errno
));
96 "data seg size (kbytes) %24"F_rlim_max
"%24"F_rlim_max
"\n",
97 rlim
.rlim_cur
, rlim
.rlim_max
);
99 if (getrlimit(RLIMIT_STACK
, &rlim
) < 0) {
100 Warn2("getrlimit(RLIMIT_STACK, %p): %s", &rlim
, strerror(errno
));
103 "stack size (blocks) %24"F_rlim_max
"%24"F_rlim_max
"\n",
104 rlim
.rlim_cur
, rlim
.rlim_max
);
106 if (getrlimit(RLIMIT_CORE
, &rlim
) < 0) {
107 Warn2("getrlimit(RLIMIT_CORE, %p): %s", &rlim
, strerror(errno
));
110 "core file size (blocks) %24"F_rlim_max
"%24"F_rlim_max
"\n",
111 rlim
.rlim_cur
, rlim
.rlim_max
);
113 #ifdef RLIMIT_RSS /* Linux, AIX; not Cygwin */
114 if (getrlimit(RLIMIT_RSS
, &rlim
) < 0) {
115 Warn2("getrlimit(RLIMIT_RSS, %p): %s", &rlim
, strerror(errno
));
118 "max resident set size %24"F_rlim_max
"%24"F_rlim_max
"\n",
119 rlim
.rlim_cur
, rlim
.rlim_max
);
122 #ifdef RLIMIT_NPROC /* Linux, not AIX, Cygwin */
123 if (getrlimit(RLIMIT_NPROC
, &rlim
) < 0) {
124 Warn2("getrlimit(RLIMIT_NPROC, %p): %s", &rlim
, strerror(errno
));
127 "max user processes %24"F_rlim_max
"%24"F_rlim_max
"\n",
128 rlim
.rlim_cur
, rlim
.rlim_max
);
131 #ifdef RLIMIT_NOFILE /* not AIX 4.1 */
132 if (getrlimit(RLIMIT_NOFILE
, &rlim
) < 0) {
133 Warn2("getrlimit(RLIMIT_NOFILE, %p): %s", &rlim
, strerror(errno
));
136 "open files %24"F_rlim_max
"%24"F_rlim_max
"\n",
137 rlim
.rlim_cur
, rlim
.rlim_max
);
140 #ifdef RLIMIT_MEMLOCK /* Linux, not AIX, Cygwin */
141 if (getrlimit(RLIMIT_MEMLOCK
, &rlim
) < 0) {
142 Warn2("getrlimit(RLIMIT_MEMLOCK, %p): %s", &rlim
, strerror(errno
));
145 "max locked-in-memory\n address space %24"F_rlim_max
"%24"F_rlim_max
"\n",
146 rlim
.rlim_cur
, rlim
.rlim_max
);
150 if (getrlimit(RLIMIT_AS
, &rlim
) < 0) {
151 Warn2("getrlimit(RLIMIT_AS, %p): %s", &rlim
, strerror(errno
));
154 "virtual memory (kbytes) %24"F_rlim_max
"%24"F_rlim_max
"\n",
155 rlim
.rlim_cur
, rlim
.rlim_max
);
159 fprintf(outfile
, "SIZE_MAX = %-24lu\n", SIZE_MAX
);
163 /* file descriptors */
165 /* what was this for?? */