annotate sbr/pidstatus.c @ 12:441a2190cfae

Lion fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 21 Apr 2012 13:10:49 +0900
parents bce86c4163a3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* pidstatus.c - report child's status */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
12
441a2190cfae Lion fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
3 static char ident[] = "@(#)$Id: pidstatus.c,v 1.1.1.1 2005/04/18 14:46:06 kono Exp $";
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 #endif /* lint */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #include "../h/mh.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 #include <signal.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 #ifndef BSD44
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 #ifndef BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 static char *sigs[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 "Hangup",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 "Interrupt",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 "Quit",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 "Illegal instruction",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 "Trace/BPT trap",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 "IOT trap",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 "EMT trap",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 "Floating exception",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 "Killed",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 "Bus error",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 "Segmentation fault",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 "Bad system call",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 "Broken pipe",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 "Alarm clock",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 "Terminated",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 #ifdef SIGURG
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 "Urgent I/O condition",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 #else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 "Stopped (signal)",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 "Stopped",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 "Continued",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 "Child exited",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 "Stopped (tty input)",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 "Stopped (tty output)",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 "Tty input interrupt",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 "Cputime limit exceeded",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 "Filesize limit exceeded",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 #else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 extern char *sys_siglist[];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 #endif /* BSD42 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 #endif /* BSD44 defines sys_siglist in signal.h */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 int pidstatus (status, fp, cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 register int status;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 register FILE *fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 int signum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 if ((status & 0xff00) == 0xff00)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 return status;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 switch (signum = status & 0x007f) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 if (signum = ((status & 0xff00) >> 8)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 if (cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 fprintf (fp, "%s: ", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 fprintf (fp, "Exit %d\n", signum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 case SIGINT:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 if (cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 fprintf (fp, "%s: ", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 #ifndef BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 if (signum >= sizeof sigs || sigs[signum] == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 fprintf (fp, "Signal %d", signum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 fprintf (fp, "%s", sigs[signum]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 #else /* BSD42 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 if (signum >= NSIG)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 fprintf (fp, "Signal %d", signum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 fprintf (fp, "%s", sys_siglist[signum]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 #endif /* BSD42 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 fprintf (fp, "%s\n", status & 0x80 ? " (core dumped)" : "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 return status;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 }