Check which getprotobynumber_r() variant to use
[socat.git] / procan.c
blobd0d92f3ef45e3368dc74b5c3b844cfb1c4fd2ec2
1 /* source: procan.c */
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
7 (almost).
8 */
10 #include "xiosysincludes.h"
11 #include "mytypes.h"
12 #include "compat.h"
13 #include "error.h"
14 #include "sycls.h"
15 #include "sysutils.h"
16 #include "filan.h"
18 #include <sys/resource.h>
20 #include "procan.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());
31 int fd;
32 if ((fd = Open("/dev/tty", O_NOCTTY, 0)) < 0) {
33 fprintf(outfile, "controlling terminal: -\n");
34 } else {
35 #if 1
36 fprintf(outfile, "controlling terminal: \"%s\"\n", Ttyname(fd));
37 #else
38 char procpath[PATH_MAX], devpath[PATH_MAX+1];
39 int devlen;
40 sprintf(procpath, "/proc/"F_pid"/fd/%d", Getpid(), 0 /*! fd*/);
41 if ((devlen = Readlink(procpath, devpath, sizeof(devpath))) < 0) {
43 } else {
44 devpath[devlen] = '\0';
45 fprintf(outfile, "controlling terminal: \"%s\"\n", devpath);
47 #endif
50 fprintf(outfile, "process group id = "F_pid"\n", Getpgrp());
51 #if HAVE_GETSID
52 fprintf(outfile, "process session id = "F_pid"\n", Getsid(0));
53 #endif
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));
58 int fd;
59 if ((fd = Open("/dev/tty", O_RDWR, 0600)) >= 0) {
60 fprintf(outfile, "process has a controlling terminal\n");
61 Close(fd);
62 } else {
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());
74 struct rlimit rlim;
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));
80 } else {
81 fprintf(outfile,
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));
87 } else {
88 fprintf(outfile,
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));
94 } else {
95 fprintf(outfile,
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));
101 } else {
102 fprintf(outfile,
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));
108 } else {
109 fprintf(outfile,
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));
116 } else {
117 fprintf(outfile,
118 "max resident set size %24"F_rlim_max"%24"F_rlim_max"\n",
119 rlim.rlim_cur, rlim.rlim_max);
121 #endif
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));
125 } else {
126 fprintf(outfile,
127 "max user processes %24"F_rlim_max"%24"F_rlim_max"\n",
128 rlim.rlim_cur, rlim.rlim_max);
130 #endif
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));
134 } else {
135 fprintf(outfile,
136 "open files %24"F_rlim_max"%24"F_rlim_max"\n",
137 rlim.rlim_cur, rlim.rlim_max);
139 #endif
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));
143 } else {
144 fprintf(outfile,
145 "max locked-in-memory\n address space %24"F_rlim_max"%24"F_rlim_max"\n",
146 rlim.rlim_cur, rlim.rlim_max);
148 #endif
149 #ifdef RLIMIT_AS
150 if (getrlimit(RLIMIT_AS, &rlim) < 0) {
151 Warn2("getrlimit(RLIMIT_AS, %p): %s", &rlim, strerror(errno));
152 } else {
153 fprintf(outfile,
154 "virtual memory (kbytes) %24"F_rlim_max"%24"F_rlim_max"\n",
155 rlim.rlim_cur, rlim.rlim_max);
157 #endif
158 #ifdef SIZE_MAX
159 fprintf(outfile, "SIZE_MAX = %-24lu\n", SIZE_MAX);
160 #endif
163 /* file descriptors */
165 /* what was this for?? */
166 /*Sleep(1);*/
167 return 0;