summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2023-03-01 11:32:31 -0500
committerJakob Kaivo <jkk@ung.org>2023-03-01 11:32:31 -0500
commitecdef5d94268907c9bf891f3995bd6a5b69b9d5f (patch)
tree3e96ba482a7449369bb14324c4840239b81cf658
parent5bbbb3676151cc07f81e23d5970bd0db0823df39 (diff)
only show dead processes if requestedHEADmaster
-rw-r--r--who.c54
1 files changed, 52 insertions, 2 deletions
diff --git a/who.c b/who.c
index 7ef8426..598380b 100644
--- a/who.c
+++ b/who.c
@@ -21,7 +21,16 @@ enum {
IDLE = 1<<10,
};
-char * utmpx_time(const struct utmpx *u)
+static int utmpx_exit(const struct utmpx *u)
+{
+ #ifdef __linux__
+ return u->ut_exit.__e_exit;
+ #else
+ return 0;
+ #endif
+}
+
+static char * utmpx_time(const struct utmpx *u)
{
static char dt[32];
time_t t = u->ut_tv.tv_sec;
@@ -30,7 +39,7 @@ char * utmpx_time(const struct utmpx *u)
return dt;
}
-char utmpx_state(const struct utmpx *u)
+static char utmpx_state(const struct utmpx *u)
{
char term[FILENAME_MAX];
snprintf(term, sizeof(term), "/dev/%s", u->ut_line);
@@ -156,6 +165,10 @@ int main(int argc, char *argv[])
strcpy(u->ut_line, "system boot");
}
+ if (u->ut_type == DEAD_PROCESS && !(flags & DEAD)) {
+ continue;
+ }
+
if (!strcmp(u->ut_user, "runlevel")) {
if (!(flags & RUNLEVEL)) {
continue;
@@ -182,6 +195,43 @@ int main(int argc, char *argv[])
/* exit */
}
+ if ((flags & DEAD) && u->ut_type == DEAD_PROCESS) {
+ printf("\texit=%d", utmpx_exit(u));
+ }
+
+ /*
+ printf("\t");
+ switch (u->ut_type) {
+ case EMPTY:
+ printf("EMPTY");
+ break;
+ case BOOT_TIME:
+ printf("BOOT_TIME");
+ break;
+ case OLD_TIME:
+ printf("OLD_TIME");
+ break;
+ case NEW_TIME:
+ printf("NEW_TIME");
+ break;
+ case USER_PROCESS:
+ printf("USER_PROCESS");
+ break;
+ case INIT_PROCESS:
+ printf("INIT_PROCESS");
+ break;
+ case LOGIN_PROCESS:
+ printf("LOGIN_PROCESS");
+ break;
+ case DEAD_PROCESS:
+ printf("DEAD_PROCESS");
+ break;
+ default:
+ printf("Unknown type (%hd)", u->ut_type);
+ break;
+ }
+ */
+
printf("\n");
}